今天在做android2.1上的程序向android2.2上移值的时候,发现在2.1上的退出应用程序的代码在2.2上不起作用,具体如下:
在2.1上用了以下方法来进行应用的退出:
final ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
<!-- 退出应用程序配置 -->
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
用以上方法在2.1上可以退出整个应用,无论应用中原来的activity是否已经finish掉。此外还有以下两种方法
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.
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()是一样的。具体没做实验
4.还有一个方法是利用反射得到api中没有暴露的方法,进行结束应用,具体网址忘记了。但实验时也不成功。
最后实在找不出一个能一下子退出整个应用的方法,只能在activity不用时finish()掉。如果有人找到合适的方法,请通知一下!