android 退出程序关闭死循环线程的一种方法(开源中国客户端下载APK疑问总结)

在android中往往退出程序时会调用以下方法,那么这个方法一定有效吗?在什么情况下没有用呢?

1 关闭掉所有界面

2干掉当前进程 android.os.Process.killProcess(android.os.Process.myPid());

3结束JVM System.exit(0);

       实际遇到了一个问题,开了一个服务,在服务中开了一个死循环线程做某个业务,那么退出程序时,如何关掉这个死循环线程呢(一般情况下,会设置标志位来控制线程的结束)?

       用了上述三个方法后,发现线程还一直在跑,明明杀了进程,结束了虚拟机了,既然进程都被干掉了,那么为什么进程所属的线程还在跑呢?

       2和3的确能杀死进程,但是貌似android系统自身的机制,如 界面A  启动了界面B,A没有finish.然后再B中调用finish关掉B,然后调用2和3 方法,发现关闭是无效的,进程又起来了,估计android 会认为是一种意外的关闭。因此,我尝试了 先finish掉所有的界面,然后finish掉开启的服务,然后再调用2和3的方法,结果证明 这个死循环的线程自动结束掉。

       结论,如果你有这么一个应用,彻底退出程序的话,那么应首先关掉所有的android四大组件,然后调用2和3的方法,即使开启的死循环线程也会被清理掉。这样就无须在设置标志位了,否则使用2和3的方法是无效的。


你可能感兴趣的:(关闭死循环线程,彻底退出程序,System.exit(0))