- 浏览: 57693 次
- 性别:
- 来自: 成都
文章分类
最新评论
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。
1. Dalvik VM的本地方法
Java代码:
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法 首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限
Java代码:
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
2.2的不能使用这个方法了。
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
应该使用:
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); am.killBackgroundProcesses(\"cn.com.mzba.kdwb\")
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Java代码:
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:
Java代码:
public class ScreenManager {
private static Stack activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
1. Dalvik VM的本地方法
Java代码:
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法 首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限
Java代码:
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
2.2的不能使用这个方法了。
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
应该使用:
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); am.killBackgroundProcesses(\"cn.com.mzba.kdwb\")
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Java代码:
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:
Java代码:
public class ScreenManager {
private static Stack activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
发表评论
-
TextView 的属性
2013-04-17 17:45 556收集到了TextView 的属性 ... -
ADT在线安装
2012-11-09 09:53 780注:转载自http://blog.csdn.net/kieve ... -
android 界面布局 很好的一篇总结 【转】
2012-04-26 15:24 916出处:http://www.cnblogs.com/awe ... -
android xml属性大全
2012-03-15 09:12 1013Android activity属性 android:all ... -
Android开发之屏幕大小自适应
2012-01-31 14:19 838屏幕大小: 一:不同的layout Android手机屏幕大小 ... -
Intent常用Uri
2012-01-21 09:37 801一、打开一个网页,类别是Intent.ACTION_VIEW ... -
android raw读取超过1M文件的方法
2011-11-01 15:48 823转载自:http://www.cnblogs.com/yaos ... -
Android Bitmap用法总结
2011-10-09 10:57 963转载自:http://blog.csdn.net/zhou69 ... -
Android之TextView------属性大全
2011-09-22 16:32 683android:autoLink设置是否当 ... -
Android内存泄漏简介
2011-09-09 16:28 805前言 不少人认为JAV ... -
Android的Parcel机制
2011-09-06 15:09 4017转载至:http://blog.csdn.net/caowen ... -
Android Context
2011-09-01 17:12 918在android中context可以作很多操作,但是最主要的功 ... -
android面试题
2011-06-27 11:57 9811.什么是Activity? 2.请描 ... -
android中的hdpi,ldpi,mdpi
2011-06-17 14:31 658Android2.1 和之后的版本 中的 drawable(h ... -
Android横竖屏
2011-06-08 11:22 855要解决的问题应该就两个: 一。布局问题; 二。重新载入问题。 ... -
访问android平台的通话记录CallLog
2011-06-01 15:31 1129转载自:http://android.tgbus.com/An ... -
Android软件权限知识普及
2011-05-27 11:08 859APK权限详细对照表 您的 ... -
Android调用WebService
2011-05-18 13:42 1059转载至:http://express.ruanko.com/r ... -
android实用代码片段
2011-05-06 10:58 7291. android获取到系统是24小时制还是12小时制 ... -
开发者不得不知的Android权限说明
2011-04-21 10:55 678程序执行需要读取到安全敏感项必需在androidmanifes ...
相关推荐
使用android:process和Process.killProcess和UncaughtExceptionHandler完成Android应用程序不异常退出
Android怎样才能完全退出程序? 本Android程序解决了完全退出,引用context未释放引起的oom等问题。
Android应用开发多个activity完全退出程序方法,亲测可用
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
退出app的两种方式 1 创建activity的基类,让所有的activity都继承该基类,在基类中创建一个静态的activity列表,并在oncreate方法添加该activity, 在退出时,遍历该list的activity,逐个关闭每一个activity,从而...
Android中实现再按一次返回键退出应用程序,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/64234676
Android应用源码完全退出程序的方法.zip
实现完全退出应用程序功能,停止所有应用程序的Activity,停止Service
如果想退出Android程序,一般都是调用finish()、System.exit(0)android.os.Process.killProcess(android.os.Process.myPid())等方法来实现退出程序功能,可是在实际开发中,并不能达到完全退出应用程序的效果,...
我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序,没有释放系统资源。有时跳转的...
Android中实现一键退出应用程序,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/62104900
分析帖:Android应用程序需不需要让用户手动退出?.doc
Android 应用崩溃自动启动 给用户给好的体验 本应用还可以扩展为类似京东崩溃时弹出信息反馈框 这需要你自己实现哦 另外欢迎关注我的新浪微博@MinganCai 有问题可以@我 我会尽快给你们回复的 雷锋
Android 返回键退出代码,第一次提示用户再按一次返回键退出,两秒钟内再按一次则退出程序,否则认为用户取消了退出操作!下下来就可以用,绝对好用哦~~~!!
Android 安全退出应用程序的方法总结 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程。 android.os.Process....
Android彻底退出应用程序.doc
主要介绍了Android完全退出应用程序的方法,实例分析了Android退出应用程序的相关方法与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
Android中一键退出应用程序.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。