我啓動了一個runnnable但未將其分配給變量。我該如何阻止它?我知道這是removeCallbacksAndMessages()方法的組合,但我不知道在傳遞什麼參數,此方法,因爲我創建了一個匿名的可運行:如何從處理程序中刪除未分配給變量的Runnable
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
h = new Handler();
final int delay = 1000; //milliseconds
h.postDelayed(new Runnable() {
public void run() {
mUpdateRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int mNumberOfPollsForCurrentDay = (int) dataSnapshot.getChildrenCount();
Random r = new Random();
int randomPollInRangeOfCurrentDayNumberOfPolls = r.nextInt((mNumberOfPollsForCurrentDay + 1) - 1) + 1;
int numberOfPollAnswersAtRandomNumber = (int) dataSnapshot.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).getChildrenCount();
Random rr = new Random();
int randomAnswerBasedFromRandomPollAnswerChoices = rr.nextInt((numberOfPollAnswersAtRandomNumber + 1) - 1) + 1;
mUpdateRef.child(String.valueOf(randomPollInRangeOfCurrentDayNumberOfPolls)).child(POLL_ANSWERS_LABEL).child(String.valueOf(randomAnswerBasedFromRandomPollAnswerChoices)).child("Vote_Count").runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
mutableData.setValue((Long) mutableData.getValue() + 1);
return Transaction.success(mutableData);
}
@Override
public void onComplete(FirebaseError firebaseError, boolean b, DataSnapshot dataSnapshot) {
}
});
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
h.postDelayed(this, delay);
}
}, delay);
}
});
我認爲你需要停止處理程序,http://stackoverflow.com/questions/18671067/how-to-stop-handler-runnable – stjepano
@stjepano - 不,這個Runnable是一個匿名類 –
一種方法來阻止runnable是在「run()」的最開始處放置一個「活動」布爾值並切換該值以殺死runnable。 –