注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

Android应用程序的完全退出  

2011-10-05 15:00:26|  分类: 问题小汇 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
  在Android中,即使我们退出了所有的Activity。但是其应用程序并不能结束,系统还有继续保持其一段时间。
关于此的更多内容请参照《Task和Activity相关的一些属性》中,关于android:alwaysRetainTaskState等相关的介绍
然而我们可以在根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);
}
}

};

结束

  评论这张
 
阅读(857)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017