我有兩個處理程序。處理程序中的處理程序。它們都在一個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 和n
number的數量。盡管創建了多個處理程序,但您僅刪除了最新創建的回調。CountRunnable
m
MessageRunnables
Hanlder
這是你應該做的:
保留所有Handler
s andRunnables
和調用messageHandler.removeCallbacksAndMessages(null);
and的引用countDownHandler.removeCallbacksAndMessages(null);
。
添加回答
舉報
0/150
提交
取消