Android应用程序的完全退出

本文详细介绍了在Android应用中通过根Activity的onDestroy()方法实现应用强制退出的方法,包括使用System.exit(0)和android.os.Process.killProcess()。同时提供了示例程序演示如何在非根Activity中调用这些方法,并在自己的Application中判断是否还有工作正在进行,从而决定是否真正结束进程。
本人博客原文
在Android中,即使我们退出了所有的Activity。但是其应用程序并不能结束,系统还有继续保持其一段时间。
关于此的更多内容请参照《 Task和Activity相关的一些属性 》中,关于 android:alwaysRetainTaskState等相关的介绍
然而我们可以在 根Acitivity的onDestroy() 方法中,做一些操作来让该应用程序彻底退出,即进程结束。
我现在测试并有效的方法有 System.exit(0) android.os.Process.killProcess(android.os.Process.myPid()) 这两种方法。网上有人反应这两种方法无效,我想他们可能是没在 根Acitivity 的onDestroy() 使用他们。 上面这两种方法在非根Activity中使用时,的确无效

如果你还不知道什么样的 Acitivity 称之为为 根Acitivity 的话,请参阅《 Activity和Task的基本模型 》和《 Task和Activity相关的一些属性
示例程序1:
protected void onDestroy() {
super.onDestroy();
System.exit(0);
//或android.os.Process.killProcess(android.os.Process.myPid()); 
Log.d(tag,"onDestroy");
}
示例程序2 (自己的Application中)

    private final static HandlerThread business0HandlerThread = new HandlerThread ( "Business0Handler" );
    private static Handler business0Handler ;
    public static Handler getBusiness0Handler () {
        if ( business0Handler == null ) {
        synchronized ( business0HandlerThread ){
    if ( business0Handler == null ) {
business0HandlerThread . start ();
business0Handler = new Handler ( business0HandlerThread . getLooper ());
}
        }
        }
        return business0Handler ;
    }
/*
* 在这里判断是否还有工作在进行
*/
public boolean isAnyWorkGoing () {
return false ;
}
ActivityManager am ;
public boolean shouldKill () {
if ( isAnyWorkGoing ()) {
return true ;
} else {
if ( am == null ) {
for ( int i = 0 ; i < 5 ; i ++) {
am = ( ActivityManager ) getSystemService ( Context . ACTIVITY_SERVICE );
if ( am != null )
break ;
try {
Thread . sleep ( 50 );
} catch ( InterruptedException e ) {
e . printStackTrace ();
}
}
}
List < RunningTaskInfo > runningTasks = am . getRunningTasks ( 100 );
for ( RunningTaskInfo task : runningTasks ) {
ComponentName baseActivity = task . baseActivity ;
if ( baseActivity != null
&& task . baseActivity . getClassName (). startsWith (
"cn.edu.edut.robin" )) {
if ( task . numRunning > 0 ) {
Log . d ( TAG , task . baseActivity . getClassName ()
+ task . numRunning );
flgKillLoop = false ;
return true ;
}
}
}
}
return false ;
}
boolean flgKillLoop = false ;
public void signKill () {
flgKillLoop = true ;
getBusiness0Handler (). post ( killRunable );
}
Runnable killRunable = new Runnable () {
@Override
public void run () {
if ( shouldKill ()) {
android . os . Process . killProcess ( android . os . Process . myPid ());
} else if ( flgKillLoop ) {
getBusiness0Handler (). postDelayed ( killRunable , 60 * 1000 );
}
}
};

结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值