14、Android完美退出应用

还有一种比较流行的Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解、易于操作,非常不错!

MyApplication类(储存每一个Activity,并实现关闭所有Activity的操作)

public class MyApplication extends Application {


 private List<Activity> activityList = newLinkedList<Activity>(); 
 private static MyApplication instance;
 
            private  MyApplication()
            {
            }
           
  //单例模式中获取唯一的MyApplication实例 
             public  static MyApplication getInstance()
             {
                            if(null== instance)
                          {
                             instance= new MyApplication();
                          }
                 return instance;             

             }
            
 //添加Activity到容器中
             public  void addActivity(Activity activity)
             {
                            activityList.add(activity);
             }
            
 //遍历所有Activityfinish

             public  void exit()
             {

                          for(Activityactivity:activityList)
                         {
                           activity.finish();
                         }

                          System.exit(0);

            }

}


在每一个Activity中的onCreate方法里添加该ActivityMyApplication对象实例容器中

MyApplication.getInstance().addActivity(this);

在需要结束所有Activity的时候调用exit方法

MyApplication.getInstance().exit();

 

例如在MainActivity中点击两次退出应用:

public class MainActivity extends AppCompatActivity{

    // 定义一个变量,来标识是否退出

    private static boolean isExit;

    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            isExit = false;
        }

    };


   @Override
    protected void onResume() {
        super.onResume();
        isExit = false;
   
    }

 @Override
    public void onBackPressed() {
        exit();
//        super.onBackPressed();
    }


 private void exit() {
        if (!isExit) {
            isExit = true;
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
            mHandler.sendEmptyMessageDelayed(0, 2000);
        } else {
//            finish();
//            System.exit(0);
//            android.os.Process.killProcess(android.os.Process.myPid()) ;
            MyApplication.getInstance().exit();
        }
    }

}

有人反映,如果程序崩溃,可能会导致该类的被迫关闭并重建,使得前期放入的Activity无法正常关闭。


猜你喜欢

转载自blog.csdn.net/lanxuan1993/article/details/80360657