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

Android应用程序的完全退出

2012-11-15 09:24 246 查看


在Android中,即使我们退出了所有的Activity。但是其应用程序并不能结束,系统还有继续保持其一段时间。

然而我们可以在根Acitivity的onDestroy()方法中,做一些操作来让该应用程序彻底退出,即进程结束。

我现在测试并有效的方法有System.exit(0)和android.os.Process.killProcess(android.os.Process.myPid())这两种方法。网上有人反应这两种方法无效,我想他们可能是没在根Acitivity的onDestroy()使用他们。上面这两种方法在非根Activity中使用时,的确无效。

不过理论上来说根Acitivity的onDestroy()被调用的话,该进程一般也就结束了。

如果你还不知道什么样的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);   }  }
 };


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