android2.2系统退出应用



  android2.1上的的退出应用程序的代码在2.2上不起作用,具体如下:

在2.1上用了以下方法来进行应用的退出:


Java代码
final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());

<!-- 退出应用程序配置 -->
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>

用以上方法在2.1上可以退出整个应用,无论应用中原来的activity是否已经finish掉。此外还有以下两种方法
Java代码
2.android.os.Process.killProcess(android.os.Process.myPid());
3.System.exit(0);

也是可以退出整个应用的。但是当移值到2.2系统上后,以上三个方法均不能起到退出整个应用的效果,只能是关闭当前的activity,此时若Task栈中存在没有关闭的activity,就会弹出栈中的activity,进行出现不能退出整个应用的现像。



后来在网上也查了是否有相关的方法。给出的方法有下面几种,但结果都不理想:

1.
 
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activity.startActivity(startMain);
System.exit(0);//退出程序




这个程序做了个实验,发现可以退出主界面,但并不能完全退出当前的应用,按上述方法退出后,当再次进行应用时,会显示出原来没有finish掉的栈中的那个activity.因此,与其说这是个退出方法,不如说只是强制程序回到了主界面,而原应用并没有彻底退出。

2.
Java代码
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.killBackgroundProcessesgetPackageName());

<!--权限-->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES">

在2.2中,提供了上述一个方法,需要加入权限,但在实验时,也不能完全退出应用。

3.

在eoe上有人用Receiver来实现应用的退出。

http://www.eoeandroid.com/thread-62284-1-1.html

但是感觉跟finish()是一样的。具体没做实验

 

 

以上是转自http://wangxuefang.javaeye.com/blog/951989 一篇文章。

 

 

后面发现有两个方法还是可行的:

 

1,

 

final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
finish();

 


<!-- 用于整个应用退出-->
<uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

 

 

2,前提:所有的activity都在一个包名(packageName)下

 

//退出整个应用程序
public static void killProcess(String packageName) {
// TODO Auto-generated method stub

// String packageName = mAct.getPackageName();
String processId = "";
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("ps");
BufferedReader br = new BufferedReader(new InputStreamReader(p
.getInputStream()));
String inline;
while ((inline = br.readLine()) != null) {
if (inline.contains(packageName)) {
break;
}
}
br.close();
StringTokenizer processInfoTokenizer = new StringTokenizer(inline);
int count = 0;
while (processInfoTokenizer.hasMoreTokens()) {
count++;
processId = processInfoTokenizer.nextToken();
if (count == 2) {
break;
}
}
r.exec("kill -15 " + processId);
} catch (IOException ex) {
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值