我有一个疑问..我的应用程序中有一个活动的人。虽然我的活动破坏了处理程序仍在运行。它是否在应用程序进程以外的其他进程上运行?任何人都可以解释为什么它的工作方式如此? 是否可以在onDestroy活动时停止处理程序?
提前致谢。
答案 0 :(得分:26)
如文档中所述
http://developer.android.com/reference/android/os/Handler.html
“每个Handler实例都与一个线程和该线程的消息队列相关联。”
当您即将完成活动时,例如在onDestroy()
中,您还需要取消为其启动的runnable的回调:
mHandler.removeCallbacks(previouslyStartedRunnable);
即使没有检查在您的活动处于活动状态时是否已经触发了runnable,您也可以这样做。
<强>更新强>
还有两个案例需要考虑:
1。)您已经以为Runnable创建新类的方式实现了Handler,例如
private class HandleUpdateInd implements Runnable...
通常你需要这样做,如果你必须用当前参数集开始延迟runnable(可能会改变直到runnable fires)。要取消它,您需要使用
mHandler.removeCallbacksAndMessages(HandleUpdateInd.class);
2.。)如果您正在使用内联呼叫(JPM感谢您的评论)
handler = new Handler() { public void handleMessage(Message msg) { ... } };
然后,您需要为该Message定义“what”值。稍后,如果您需要取消它,您可以使用
handler.removeMessages(what);
执行该任务。
答案 1 :(得分:1)
你的意思是你在活动的某个地方有一个主题吗?停止一个线程非常简单,你需要有一个该线程的引用。像:
private Thread mMyThread;
mMyThread = new Thread .......
当你想要停止它时,只需检查引用是否为空并调用中断方法:
if (mMyThread != null) {
mMyThread.interrupt();
}
希望它会有所帮助
答案 2 :(得分:0)
我喜欢Zelimir的回答,只是关于这个问题的更多信息 - Android没有定义应用程序生命周期的限制,应用程序是在第一次启动时创建的,并且可能在几个活动onCreate /之间保持活动状态onDestroy周期。处理程序与应用程序单个主事件线程/队列相关联,因此活动无法停止&#34;停止&#34;它(虽然你可能通过Handler.getLooper()。quit()来做到这一点,但是我不确定它是否会导致问题。你也可以按照这里所述杀死整个应用程序{{3} })。
Android概念可能是尽可能多地重用Applications实例,因此在开发Activity时主要关注的是在onDestroy调用上正确清除Activity的资源。处理程序中的静态变量,线程,AsyncTasks和消息/回调是需要担心的事项。