如何阻止处理程序?

Pra*_*ath 19 android

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

提前致谢.

Zel*_*mir 26

如文档中所述

http://developer.android.com/reference/android/os/Handler.html

"每个Handler实例都与一个线程和该线程的消息队列相关联."

当您即将完成您的活动时,例如在onDestroy()您还需要取消为其启动的runnable的回调:

mHandler.removeCallbacks(previouslyStartedRunnable);
Run Code Online (Sandbox Code Playgroud)

即使没有检查在您的活动处于活动状态时是否已经触发了runnable,您也可以这样做.

更新:

还有两个案例需要考虑:

1.)您已经以为Runnable创建新类的方式实现了Handler,例如

private class HandleUpdateInd implements Runnable...
Run Code Online (Sandbox Code Playgroud)

通常你需要这样做,如果你必须使用当前参数集启动延迟runnable(可能会发生变化,直到可运行的火灾).要取消它,您需要使用

mHandler.removeCallbacksAndMessages(HandleUpdateInd.class);
Run Code Online (Sandbox Code Playgroud)

2.)如果您使用内联电话(JPM感谢评论)

handler = new Handler() { public void handleMessage(Message msg) { ... } };
Run Code Online (Sandbox Code Playgroud)

然后,您需要为该消息定义"what"值.稍后,如果您需要取消它,您可以使用

handler.removeMessages(what); 
Run Code Online (Sandbox Code Playgroud)

执行该任务.


Ale*_*lex 1

您的意思是您的活动中某处有一个线程吗?停止一个线程非常容易,您需要有该线程的引用。喜欢:

private Thread mMyThread;
mMyThread = new Thread .......
Run Code Online (Sandbox Code Playgroud)

当你想停止它时,只需检查引用是否不为空并调用中断方法:

if (mMyThread != null) {
    mMyThread.interrupt();
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助