2016-11-03 3 views
0

Im Moment habe ich eine Aktivität, sagen wir "Aktivität A", die den Timer ausführt. Es ist meine Firebase zu aktualisieren, wenn die Zeit abgelaufen ist.So stoppen Sie den Timer einer Aktivität von einer anderen Aktivität

timer.scedule(new TimerTask()){ 
 
@Override 
 
public void run() { 
 
\t notification(); 
 
\t Firebase areaRef = mAreaRef.child(bKey); 
 
\t areaRef.addListenerForSingleValueEvent(new com.firebase.client.ValueEventListener() { 
 
\t @Override 
 
\t \t public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) { 
 
\t \t \t checkData = dataSnapshot.child("data").getValue(Integer.class); 
 
\t \t \t Integer addData = checkData+1; 
 
\t \t } \t 
 

 
\t @Override 
 
\t \t public void onCancelled(FirebaseError firebaseError) { 
 

 
\t \t } \t 
 
\t \t });              
 
\t } 
 
},millis); 

Es wird eine Schaltfläche 'Aktion B' sein. Wenn auf die Schaltfläche geklickt wird, muss der Timer bei "Aktivität A" gestoppt werden.

Wie mache ich das?

Antwort

0

Es kann nur eine "Aktivität" gleichzeitig aktiviert sein. Ihre "Aktivität A" kann stattdessen durch einen Service erfolgen. Und dann wird Ihr Problem gelöst, indem "Aktivität B" die Service-Methode direkt aufruft, um den Timer zu stoppen, wenn auf die Schaltfläche geklickt wird.

0

Wenn Ihre Timer Aufgabe wirklich über Aktivitäten am Leben sein muss, sollten Sie vielleicht einen anstelle eines Timers in der angegebenen Aktivität Service betrachten verwenden.

0

1.Change Timer auf CountDownTimer Anruf start() Anruf cancel() zu stoppen beginnen. Wie Aktivität A zu stoppen den CountDownTimer, können Sie SharedPreferences auf andere Art und Weise ändern, um mit Daten mitteilen

public class MainActivity extends AppCompatActivity { 
    CountDownTimer timer = new CountDownTimer(30000, 1000) { 
     public void onTick(long millisUntilFinished) { 
      SharedPreferences sharedPreferences = getSharedPreferences("count", 0); 
      if (sharedPreferences.getBoolean("stop", false)) { 
       timer.cancel(); 
      } else { 
       Log.d("tag", millisUntilFinished/1000 + ""); 
      } 
     } 

     public void onFinish() { 

     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     timer.start(); 
     Intent intent = new Intent(this, ActivityB.class); 
     startActivity(intent); 
    } 
} 
public class ActivityB extends AppCompatActivity { 
    Button mStop; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_b); 
     mStop =(Button) findViewById(R.id.stop); 
     mStop.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       SharedPreferences sharedPreferences = getSharedPreferences("count",0); 
       SharedPreferences.Editor edit= sharedPreferences.edit(); 
       edit.putBoolean("stop", true); 
       edit.apply(); 
      } 
     }); 
    } 
} 
+0

Darf ich wissen, warum CountDownTimer verwendet wird anstelle von Timer benachrichtigen? – jwen

+0

haha, Absolut können Sie Timer verwenden, CountDownTimer ist mein Favorit (es ist nur in android.os Paket), – shuabing

+0

Oh? Ich dachte, dass CountDownTimer verwendet wurde, so dass es jede 1 Sekunde "ActivityB" für die geteilten Präferenzen überprüft. Wenn dies nicht der Fall ist, handelt es sich bei den geteilten Präferenzen um eine sofortige Aktion? – jwen

Verwandte Themen