有几个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"/>
这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed
所有创建的服务会停止,还会发一个广播
Intent.ACTION_PACKAGE_RESTARTED
导致所有注册alarms 被stopped, notifications 被removed。
这几天刷了2.2的rom发现restartPackage方法无效,网上搜了下答案:
在Android 2.2中新增了一个API可以帮助我们杀死后台进程,不过Android123再次强调其调用的API Level最小为8,killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为3,但是SDK中已经标记为deprecated,其实他们的原理都是一样的,只不过过去Google的命名方式确实不是很合理,restartPackage的作用很难让我们联想到是结束进程。
该方法的原型 public void killBackgroundProcesses (String packageName) 仅有一个参数为package Name,使用方法比较简单。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("cn.com.android123.cwj"); // API Level至少为8才能使用
所以要用此方法最好加个判断如果是2.2之前的rom就用restartPackage之后的就用killBackgroundProcesses
this.finish();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
ActivityManager am= (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
首先想到的是清空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"/>
这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed
所有创建的服务会停止,还会发一个广播
Intent.ACTION_PACKAGE_RESTARTED
导致所有注册alarms 被stopped, notifications 被removed。
这几天刷了2.2的rom发现restartPackage方法无效,网上搜了下答案:
在Android 2.2中新增了一个API可以帮助我们杀死后台进程,不过Android123再次强调其调用的API Level最小为8,killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为3,但是SDK中已经标记为deprecated,其实他们的原理都是一样的,只不过过去Google的命名方式确实不是很合理,restartPackage的作用很难让我们联想到是结束进程。
该方法的原型 public void killBackgroundProcesses (String packageName) 仅有一个参数为package Name,使用方法比较简单。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("cn.com.android123.cwj"); // API Level至少为8才能使用
所以要用此方法最好加个判断如果是2.2之前的rom就用restartPackage之后的就用killBackgroundProcesses
this.finish();
System.exit(0);
android.os.Process.killProcess(android.os.Process.myPid());
ActivityManager am= (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
发表评论
-
android:gravity / android:layout_Gravity,android:padding / android:layout_margin
2012-04-07 15:21 1072android:gravity / android:layou ... -
Android触控屏幕Gesture(GestureDetector和SimpleOnGestureListener的使用教程)
2011-11-18 16:51 8201、当用户触摸屏幕的时候,会产生许多手势,例如down,up, ... -
Android ImageView 总结
2011-11-17 17:17 1203一.介绍 ImageView用来显示任意图像图片,可以自己定义 ... -
简述Android触摸屏手势识别
2011-11-16 16:45 927很多时候,利用触摸屏的Fling、Scroll等Gesture ... -
简述Android触摸屏手势识别
2011-11-16 15:49 921在Android系统中,手势的识别是通过 GestureDet ... -
Android TextView属性详解
2011-11-10 17:12 756android:autoLink设置是否当 ... -
android监听返回按钮事件
2011-11-08 18:38 738用户在点击手机的返回按钮时,默认是推出当前的activty,但 ... -
Android onTouchEvent, onClick及onLongClick的调用机制
2011-11-07 15:31 903针对屏幕上的一个View控 ... -
Android WebView放大缩小缩放
2011-11-02 10:27 2533一般情况下通过设置一下参数缩放 wv.getSettings ... -
Android控件之ZoomControls缩放控件
2011-11-01 17:14 1083一、简介 ZoomControls是一组可缩放的控件。它 ... -
Android通过手势实现的缩放处理
2011-11-01 17:12 1033主要原理是onTouchEvent事件中的参数MotionEv ... -
TextView 加下划线
2011-10-30 14:10 970如果是在资源文件里,可以这样写. Xml代码 ... -
Android TextView(EditView)文字底部或者中间加横线
2011-10-30 14:08 1636promotionLinkText = (TextView) ... -
TextView中显示HTML和图片
2011-10-30 13:55 1067在TextView中显示<img src="& ... -
Android 背景图片重复 Background repeat
2011-10-29 00:45 3194以LinearLayout为例,它提供的background属 ... -
android 3d 旋转
2011-10-27 16:23 1148在javaeye里看到了关于3d旋转的文章 效果图: 这 ... -
android 之 GridView
2011-10-27 14:14 764GridView 的用法基本与ListView类似。 ... -
android GridView的使用
2011-10-27 14:12 1407GridView跟ListView都是比较常用的多控件布局,而 ... -
android之ImageView
2011-10-26 22:17 969ImageView 首先确定下ImageView的全路径: ... -
布局学习—活用RelativeLayout
2011-10-26 00:40 656前言 Android布局中RelativeLayout非 ...
相关推荐
当程序有多个Activity时,采用广播机制完全退出程序
点击退出按钮时,关闭所有Activity,实现退出程序功能。 实现方法: 添加每一个Activity到一个Activity集合中,退出时遍历集合,将每一个Activity finish掉。
android 如何完全退出程序
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序...
Android应用开发多个activity完全退出程序方法,亲测可用
在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用...
Android完全退出程序的方法
Android怎样才能完全退出程序? 本Android程序解决了完全退出,引用context未释放引起的oom等问题。
System exit 0 ; Process killProcess 有时都不能完全退出程序 这里Demo介绍完全退出程序
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中...
Android应用源码完全退出程序的方法.zip
完全退出程序的方法_Android
主要介绍了Android完全退出应用程序的方法,实例分析了Android退出应用程序的相关方法与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
安卓Android源码——完全退出程序的方法.zip
安卓Android源码——完全退出程序的方法.rar
Android程序完全退出的方法,这个资源你在其他地方绝对找不到。
1、新建一个 ExitApplication 类继承Application 2、在你要退出的activity Oncreate方法中加入...3、在你当前要完全退出程序的activity中覆盖onKeyDown方法. 4、当你点击手机的返回按钮时将提示:是否退出系统。
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
本篇文章小编为大家介绍,Android 完全退出应用程序的解决方法。需要的朋友参考下