zoukankan      html  css  js  c++  java
  • Android企业级程序完全退出的解决方案【转】

    http://blog.csdn.net/wangjinyu501/article/details/8763552

    问题描述

            在平常开发的过程中可以发现,很多开发者对于程序的退出都没有去认真的解决。一般要么是一个简单的finish(只是退出当前的activity),要么是其他的方法,比如:

     

           1、第一种方法:首先获取当前进程的id,然后杀死该进程:  android.os.Process.killProcess(android.os.Process.myPid());

           2、第二种方法:终止当前正在运行的Java虚拟机,导致程序终止:System.exit(0);

           3、第三种方法:强制关闭与该包有关联的一切执行: ActivityManagermanager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);   

                                                                                                           manager.restartPackage(getPackageName());

                 使用这个方法需要加入权限<uses-permissionandroid:name="android.permission.RESTART_PACKAGES"/>

            但是,这几种方法都是有缺陷的,都不能完全退出程序,比如方法一,它不会把当前应用程序的activity的task栈清空。对于第三种方法,它只能杀死其他的应用程序而不能杀死自己的。

     

    二、解决方案

            1、实现思路:既然不能一次性全部关闭所有的Activity,一般企业的解决方法就是记录所有打开的Activity,利用单例模式管理Activity,然后在退出程序的时候把所有打开的Activity关闭掉。

            2、代码:

                  ⑴新建一个类App继承Application,它的作用是创建整个应用程序的全局实例,而且需要在AndroidManifest.xml清单里面添加一下。

                      

                App类:

     

    1. package com.example.testexit;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.List;  
    5. import android.app.Activity;  
    6. import android.app.Application;  
    7.   
    8. public class App extends Application {  
    9.   
    10.     ArrayList<Activity> activities;  
    11.     private static App instance;  
    12.   
    13.     /*  
    14.      * 在整个应用程序创建时执行  
    15.      */  
    16.     @Override  
    17.     public void onCreate() {  
    18.         activities = new ArrayList<Activity>();  
    19.         getInstance();  
    20.         super.onCreate();  
    21.     }  
    22.   
    23.     public static App getInstance() {  
    24.         if (null == instance) {  
    25.             instance = new App();  
    26.         }  
    27.         return instance;  
    28.   
    29.     }  
    30.   
    31.     public void exitApplication() {  
    32.   
    33.         List<Activity> lists = instance.activities;  
    34.         for (Activity a : lists) {  
    35.             a.finish();  
    36.         }  
    37.     }  
    38. }  

     

                 在其它的Activity里面,要在onCreate方法里把当前Activity加进去,然后在onDestroy方法里移除这个Activity。

     

                 MainActivity:

     

    1. package com.example.testexit;  
    2.   
    3. import android.os.Bundle;  
    4. import android.app.Activity;  
    5. import android.view.Menu;  
    6.   
    7. public class MainActivity extends Activity {  
    8.   
    9.     @Override  
    10.     protected void onCreate(Bundle savedInstanceState) {  
    11.         super.onCreate(savedInstanceState);  
    12.         setContentView(R.layout.activity_main);  
    13.   
    14.         App app = (App) getApplication();  
    15.         app.activities.add(this);  
    16.   
    17.     }  
    18.   
    19.     @Override  
    20.     public boolean onCreateOptionsMenu(Menu menu) {  
    21.         getMenuInflater().inflate(R.menu.main, menu);  
    22.         return true;  
    23.     }  
    24.   
    25.     @Override  
    26.     protected void onDestroy() {  
    27.         super.onDestroy();  
    28.         App app = (App) getApplication();  
    29.         app.activities.remove(this);  
    30.   
    31.     }  
    32.   
    33. }  

                 Activity1:

     

     

    1. package com.example.testexit;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5.   
    6. public class Activity1 extends Activity {  
    7.   
    8.     @Override  
    9.     protected void onCreate(Bundle savedInstanceState) {  
    10.         super.onCreate(savedInstanceState);  
    11.   
    12.         App app = (App) getApplication();  
    13.         app.activities.add(this);  
    14.     }  
    15.   
    16.     @Override  
    17.     protected void onDestroy() {  
    18.         super.onDestroy();  
    19.         App app = (App) getApplication();  
    20.         app.activities.remove(this);  
    21.     }  
    22.   
    23. }  

            关于这方面的内容,还可以参考其他的几篇文章http://www.2cto.com/kf/201108/99444.html

     

                                                                                                    http://blog.csdn.net/sgl870927/article/details/6281971

                                                                                                    http://www.cnblogs.com/qingblog/archive/2012/06/08/2541790.html

  • 相关阅读:
    FFTW使用小结
    CUDA -- 并行计算入门
    CUDA -- 深入理解threadIdx
    QT -- 新建线程的方法(四种办法,很详细,有截图)
    CUDA -- 性能剖析和Visual Profiler
    CUDA -- nvvp无法新建New Session(报错:can't find dependent DLL)
    CUDA -- cuda测试中的计时方式(程序/工具)
    VS/QT -- vs下QT设置.qss
    QT -- float转ushort,用QImage 显示32float格式图像(CV_32FC1)
    QSS -- Qt Widget用样式设置背景不成功的问题
  • 原文地址:https://www.cnblogs.com/fx2008/p/3140712.html
Copyright © 2011-2022 走看看