【发布时间】:2016-06-01 15:28:47
【问题描述】:
我启动了一个 runnnable,但没有将它分配给变量。我该如何阻止它?我知道它是 removeCallbacksAndMessages() 方法的组合,但是我不知道要传递给该方法的参数是什么,因为我创建了一个匿名可运行对象:
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);
}
});
【问题讨论】:
-
我认为你需要停止 Handler,stackoverflow.com/questions/18671067/…
-
@stjepano - 不,这个 Runnable 是一个匿名类
-
停止runnable的一种方法是在
run()的开头放置一个“活动”布尔值并切换它以终止runnable。 -
@cricket_007,我的意思是在线程的上下文中停止Runnable,Runnable本身不是线程,只是线程执行的代码。
-
@stjepano - 我知道您要做什么,但是如果您将发布的链接与此代码进行比较,则其他问题已保存对 Runnable 的引用。这个问题不是——它是一个匿名的 Runnable,你不能用它来调用 removeCallbacks。
标签: java android handler runnable