java - 如何从处理程序中删除未分配给变量的 Runnable

标签 java android handler runnable

我启动了一个可运行但没有将其分配给变量。我该如何阻止它?我知道它是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);

        }
    });

最佳答案

调用 h.removeCallbacksAndMessages(null) 将删除 documentation 中所述的所有回调和消息。 :

Remove any pending posts of callbacks and sent messages whose obj is token. If token is null, all callbacks and messages will be removed.

请注意,如果可运行程序已经在执行中,这不会停止它,但如果它仍处于挂起状态,则会将其删除。

关于java - 如何从处理程序中删除未分配给变量的 Runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35515788/

相关文章:

java - JPanel 出现在 JMenuBar 后面

java - 使用安卓 getIdentifier()

handler - 信号处理程序中的不可重入函数?

javascript - jquery/javascript - 从 onComplete 属性运行两个函数

java - 用于附加文件的 RESTeasy 客户端代码

java - 集成测试中 JsonDeserializer 的 Spring Boot Autowiring

Java流peek()操作

android - EditText 焦点自动打开键盘

android - 从 Microsoft 应用程序注册门户获取的客户端 ID 的安全问题

.net - 清除程序的所有处理程序的通用函数?