亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調用 removeCallbacksAndMessages(null) 后處理程序不會結束

調用 removeCallbacksAndMessages(null) 后處理程序不會結束

慕神8447489 2022-07-20 10:38:27
我有兩個處理程序。處理程序中的處理程序。它們都在一個for循環中。概述是這樣的,for{    handler.postDelayed(runnableA{        for{            handler2.postDelayed(runnableB{                function();            }, 3000);        }    }, 1000);}我想在用戶單擊時隨時結束處理程序的工作back button。因此,我創建了兩個 Runnable 類,以便我可以使用類似runnableA.removellbacksAndMessages(null).Handler messageHandler;Handler countDownHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    Toast.makeText(this, "Start Play in 5 seconds", Toast.LENGTH_SHORT).show();    countDownHandler = new Handler();    for (int i = 7; i >= 0; --i) {        final int idx = i;        Runnable countRunnable = new CountRunnable(idx, countDownView);        countDownHandler.postDelayed(countRunnable, 1000 * (7 - i));    }}這是可運行的類。public class CountRunnable implements Runnable {    int idx;    TextView countDownView;    public CountRunnable(int idx, TextView countDownView) {        this.idx = idx;        this.countDownView = countDownView;    }    @Override    public void run() {        int messageSize = messageItems.size();        for (int j = 0; j < messageSize; j++) {            final int jdx = j;            messageHandler = new Handler();            Runnable messageRunnable = new MessageRunnable(jdx);            messageHandler.postDelayed(messageRunnable, 3000 * jdx);        }    }}class MessageRunnable implements Runnable {    int jdx;    public MessageRunnable(int jdx) {        this.jdx = jdx;    }    @Override    public void run() {        addMessageView(messageItems.get(jdx));    }}但是,我不斷收到錯誤,因為活動已經結束但處理程序找不到活動。因此,Abnormal EndToast 消息顯示的大小與內部 for 循環的大小一樣多。如果我不使用 Toast 消息,我可以忽略這一點,但我擔心內存泄漏或格式錯誤的程序或類似的東西。我該如何解決這個問題?
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

主要問題是您正在創建s 和nnumber的數量。盡管創建了多個處理程序,但您僅刪除了最新創建的回調。CountRunnablemMessageRunnablesHanlder

這是你應該做的:

保留所有Handlers andRunnables和調用messageHandler.removeCallbacksAndMessages(null);and的引用countDownHandler.removeCallbacksAndMessages(null);。


查看完整回答
反對 回復 2022-07-20
  • 1 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號