您的位置:首页 > 移动开发 > Android开发

Android应用程序的完全退出

2011-12-14 14:20 393 查看
本人博客原文

在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); } }
};

结束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 测试