如何阻止处理程序?

时间:2011-02-18 05:42:40

标签: android

我有一个疑问..我的应用程序中有一个活动的人。虽然我的活动破坏了处理程序仍在运行。它是否在应用程序进程以外的其他进程上运行?任何人都可以解释为什么它的工作方式如此? 是否可以在onDestroy活动时停止处理程序?

提前致谢。

3 个答案:

答案 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和消息/回调是需要担心的事项。