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的生命周期

我们知道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);  } }}

原文链接: http://hunankeda110.javaeye.com/blog/897305


更多相关文章

  1. Android(安卓)退出程序的若干方法总结
  2. android的ondraw方法大全
  3. [5] Zygote
  4. android退出所有的activity
  5. Android手机记账应用开发视频教程
  6. Android源码下载,亲测可用,解决了repo下载没有速度问题
  7. setImageResource和setImageDrawable区别
  8. android 安全退出应用程序
  9. android 退出 activity

随机推荐

  1. Linux内核怎样启动Android
  2. Android中的消息处理实例与分析
  3. Android:什么情况?
  4. Android深入理解android:layout_gravity
  5. android布局文件中各属性所代表的意义
  6. Android(安卓)WebView与 JS 的交互方式
  7. android:layout_gravity和android:gravit
  8. android:layout_gravity和android:gravit
  9. android:layout_gravity和android:gravit
  10. android中线程进程模型