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

01 publicclassScreenManager {
02 privatestaticStack<Activity> activityStack;
03 privatestaticScreenManager instance;
04 privateScreenManager(){
05 }
06 publicstaticScreenManager getScreenManager(){
07 if(instance==null){
08 instance=newScreenManager();
09 }
10 returninstance;
11 }
12 //退出栈顶Activity
13 publicvoidpopActivity(Activity activity){
14 if(activity!=null){
15 activity.finish();
16 activityStack.remove(activity);
17 activity=null;
18 }
19 }
20
21 //获得当前栈顶Activity
22 publicActivity currentActivity(){
23 Activity activity=activityStack.lastElement();
24 returnactivity;
25 }
26
27 //将当前Activity推入栈中
28 publicvoidpushActivity(Activity activity){
29 if(activityStack==null){
30 activityStack=newStack<Activity>();
31 }
32 activityStack.add(activity);
33 }
34 //退出栈中所有Activity
35 publicvoidpopAllActivityExceptOne(Class cls){
36 while(true){
37 Activity activity=currentActivity();
38 if(activity==null){
39 break;
40 }
41 if(activity.getClass().equals(cls) ){
42 break;
43 }
44 popActivity(activity);
45 }
46 }
47 }

更多相关文章

  1. Android(安卓)5.0以上加slidingmenu后页面不刷新解决方法
  2. android与js之间的交互
  3. Android(安卓)Studio Gradle Could not reserve enough space fo
  4. android----Activity对应的UI嵌套子UI(fragment)方法
  5. Android实现机制(二)——View绘制机制
  6. Android中解决FragmentPagerAdapter刷新Fragment无效的问题
  7. android 资源id与文件名字
  8. Android(安卓)多线程之IntentService 完全详解
  9. Android获取LayoutInflater对象的方法总结

随机推荐

  1. Android(安卓)Studio如何设置自动import
  2. android memory 优化
  3. 为什么我要改用Kotlin
  4. [RK3399] [Android 9.0] 调试2560x1440分
  5. Android 常用代码大集合
  6. Android中使用OkHttp框架
  7. 关于Android ListView组件中android:draw
  8. Android使用http协议与服务器通信的实例
  9. 【高通平台】安卓平板,使用QQ 视频通话,视
  10. Android 的init脚本编写解析