Android 如何退出程序

来源:互联网 发布:mac修改磁盘权限 编辑:程序博客网 时间:2024/04/28 10:38

如果退出当前运行的Activity,可以使用 this.finish() 或者 System.exit(0) 

 

如果退出整个程序,如下操作:

方式一:

Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0);

方式二:

android.os.Process.killProcess(android.os.Process.myPid());

android 完全退出程序

有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity

首先想到的是清空activityA的堆栈,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是该activityA不是已经存在于堆栈底端的,所以清除的只是堆栈中该activityA上面的activity,但后退后还是会返回堆栈中该activityA下面的activity

然后想到的是截获back按键的事件,使用System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())来退出程序,还是不行,当前的activityA是被干掉了,但是还是会被ActivityManager接管返回到前一个activity。而且如果之前activity需要一些传过来的参数的话会导致程序连续抛异常。

最后终于找到一个可行的方法:使用ActivityManager彻底退出程序

ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); 
manager.restartPackage(getPackageName());

需要声明权限<uses-permission android:name="android.permission.RESTART_PACKAGES"/>

这种方法会终止一切和这个程序包关联的,所有共享同一uidprocesskill,所有的activity会被removed

所有创建的服务会停止,还会发一个广播 Intent.ACTION_PACKAGE_RESTARTED 导致所有注册alarmsstopped, notifications removed


原创粉丝点击