我有一個疑問..我有一個在我的應用程序中的活動hander。儘管我的活動摧毀了仍在運作的經理。它是否在應用程序進程以外的其他進程上運行?任何人都可以解釋爲什麼它的工作是這樣嗎? 在onDestroy活動時是否可以停止處理程序?如何停止處理程序?
在此先感謝。
我有一個疑問..我有一個在我的應用程序中的活動hander。儘管我的活動摧毀了仍在運作的經理。它是否在應用程序進程以外的其他進程上運行?任何人都可以解釋爲什麼它的工作是這樣嗎? 在onDestroy活動時是否可以停止處理程序?如何停止處理程序?
在此先感謝。
你的意思是說你的活動中有某個線索嗎?停止一個線程很容易,你需要有一個線程的參考。像:
private Thread mMyThread;
mMyThread = new Thread .......
,當你想停止它,只是檢查,如果引用不爲空,並調用中斷方法:
if (mMyThread != null) {
mMyThread.interrupt();
}
希望這將有助於
謝謝...它幫助了很多... – Taruni 2012-12-19 07:11:18
正如描述文檔
http://developer.android.com/reference/android/os/Handler.html
「每個處理器實例與單個線程和該線程的消息隊列相關聯。「
當您即將完成您的活動時,在onDestroy()
還需要取消回調有人開始爲可運行:
mHandler.removeCallbacks(previouslyStartedRunnable);
你可以做,即使沒有檢查是否可運行已經被解僱,而你的活動明顯活躍。
UPDATE:
有要考慮的兩個新情況:
1)你已經實現了在您爲Runnable接口,例如創建新類的方式處理程序
private class HandleUpdateInd implements Runnable...
通常你需要做的,如果你要開始延遲可運行當前的參數設置(可能改變,直到運行的火災)。要取消它,你需要如果您使用內嵌調用(JPM感謝您的評論)
handler = new Handler() { public void handleMessage(Message msg) { ... } };
然後,你需要定義該消息「什麼」價值使用
mHandler.removeCallbacksAndMessages(HandleUpdateInd.class);
2)。稍後,如果您需要取消它,您可以使用
handler.removeMessages(what);
執行該任務。
如果你的onCreate的一個活動內聯調用你如何做到這一點?即handler = new Handler(){public void handleMessage(Message msg){...}}; – JPM 2011-11-22 00:08:27
我喜歡Zelimir的回答,只是關於此事的更多信息 - Android沒有爲應用程序生命定義限制,應用程序是在第一次啓動時創建的,並且可能會在幾個活動onCreate/onDestroy循環之間保持活動狀態。處理程序與Application單個主事件線程/隊列相關聯,所以一個活動不能「停止」它(雖然你可能可以通過Handler.getLooper()。quit()來實現,但我不確定它是否贏得了'不會造成問題,也可以按照here中所述的方法殺死整個應用程序)。
Android的概念很可能是儘可能多地重用Applications實例,所以在開發Activity時主要關心的是在onDestroy調用中正確清除Activity的資源。處理程序中的靜態變量,線程,AsyncTasks和消息/回調是需要擔心的項目。
如果您提供處理程序的詳細信息會更有幫助,如果您發佈了代碼,則會更好。另外,你是否在不同的線程上實例化處理程序? – basilisk 2011-02-18 05:48:03