Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。

1. Dalvik VM的本地方法

android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出

2. 任务管理器方法

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-permission>

3. 根据Activity的声明周期

3. 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

在A窗口中使用下面的代码调用B窗口

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的方法。代码如下:

public class ScreenManager {
private static Stack<Activity> 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<Activity>();
}
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);
}
}
}

5.自己写一个Activitiy的管理类,最简单的是用一个List来保持,每开启一个activity,就将其加到List里。当你想完全退出程序时,你将List里的每个Activity都finish()掉就可以了。 不过个人不太喜欢使用这种方法。
6.在你的每个Activity里,注册一个特定的Broadcast,当你想退出程序时,就send一个特定的Broadcast,这样所有还没有 finish的activity都可以接收到这个broadcast,接收到broadcast后,就finish掉Activity。这样该程序的所有 Activity就finish了,也就达到了退出程序的效果

更多相关文章

  1. Android(安卓)TypedArray源码详解
  2. Android学习札记24:收集到的一些关于解决Bitmap OOM内存溢出的方
  3. 第10章(2)---ThreadLocal
  4. Android:xUtils3 浅析(二)——数据库模块
  5. Android的Handler常见的面试问题
  6. Android判断EditText是否有输入内容的方法
  7. Android(安卓)只开启一个Activity实例
  8. Android(安卓)-- AppWidget 进阶篇
  9. Android(安卓)之最新最全的Intent传递数据方法

随机推荐

  1. 2017年Android面试题总结
  2. android音乐播放器拖放播放进度设计
  3. Android 实现动态生成菜单
  4. Android(安卓)文字倾斜
  5. android 定时任务的几种实现方式
  6. 一些android porting 例子
  7. 禁止应用获取手机信息
  8. Android程序运行中动态加载Lib的方法(一)
  9. Android真机调试——远程主机强迫关闭了
  10. Android Google Map实例 - 不同的图标标