亲们,还在愁你的应用彻底关不掉?是不是开发的程序在关闭掉最后一个Activity后,结果在 设置-管理应用程序-你的程序进去后还是这样?(如下图)
你妹啊,明明他奶奶的我都已经关闭了所有Activity了,也在我的最后一个Activity里面调用了以下据说有用的看起来很恶心的方法:
System.out(0);
android.os.Process.killProcess(android.os.Process.myPid());
我得不说明以上的方法就算你一起调用也贼不管用,特别是第二个方法,居然在Android4.1下会引发一点不该用的小错误。好吧,闲话少说。亲们。。路在何方啊。
就在我们一筹莫展的时候,k45596同学上传的一个android 禁止弹出崩溃窗口的一个Demo吸引了我的注意。感谢k45596同学。这是他的程序:
http://download.csdn.net/download/k45596/4875826
于是我就想我们能不能故意让程序崩溃但是又阻止弹出崩溃窗口的方式来彻底关闭程序呢?(最后结果证明可行)于是说干就干,我很淫荡的在我要关闭的Activity的onDestoty()里面加上了以下代码:
@Override
protected void onDestroy() {
ConnectUtil.closeConnection();
int a = 1/0;(这行会报错)
super.onDestroy();
}
----前提是之前根据k45596同学的举例代码。我们已经自己定义了一个类:
public class CatchHandler implements UncaughtExceptionHandler{
private CatchHandler() {
}
public static CatchHandler getInstance() {
return mCatchHandler;
}
private static CatchHandler mCatchHandler = new CatchHandler();
public void init(){
Thread.setDefaultUncaughtExceptionHandler(this);
}
@Override
public void uncaughtException(Thread thread, Throwable ex) {
if (thread.getName().equals("main")) {
System.exit(0);
}
}
}
一个典型的单例模型,我们需要做的是在初始Activity的onCreate()调用:
CatchHandler.getInstance().init();
当崩溃以后,会自动调用到CatchHandler类的uncaughtException这个方法。好吧戏剧性的事情出现了:
当运行到int a = 1/0;这个小小的错误的时候,触发了CatchHandler的uncaughtException()。以前怎么调用都不管用的System.exit(0);
这个破代码居然他么的管用了,程序居然真的彻底退掉了!(如下图)
好吧,我啥也不说了。。。亲们。。。希望给跟我一样曾经因为该死的不完全退出程序的苦恼程序员们一个新的想法!
如有不明白或者索取代码之处请联系我的邮箱xujian20091009@163.com,谢谢!