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

android2.2系统退出应用

2011-03-28 21:46 441 查看
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) {
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: