android 退出系统的解决办法

来源:互联网 发布:乐视2pro相机优化 编辑:程序博客网 时间:2024/06/06 01:37

我们都知道,Activity是存放在栈中。在默认的情况下(standard)Activity在栈中是以先进后出、后进先出的方式进行存放。最开始出现的Activity会存在栈底,最新启动的Activity总是会存在栈顶。当我们开启的Activity越来越多,当前想在某个界面退出当前应用程序的时候,或者双击返回键退出当前应用程序。这个时候只能一个一个的把当前所有启动的Activity销毁,直到清空栈中的所有Activity,应用程序才能退出

销毁所有Activity,退出应用程序常见的方式有下面四种:
(1) System.exit(0) 使用系统的方法,强制退出
(2) 抛出异常,强制退出
(3) 使用Application退出
(4) 使用广播退出

我在项目中使用第三种方式,在全局Application类中用一个List存放所有的Activity,退出时对所有的Activity使用finish()….。activity.finish();

下面给出具体的用法
1.创建一个MyApplication类,继承Application,在AndroidManifest.xml的application节点的

<application        android:name=".MyApplication"         ....此处是其他配置....    />
public class MyApplication extends Application {    //用于存放所有启动的Activity的集合    private List<Activity> activityList;    @Override    public void onCreate() {        super.onCreate();        activityList = new ArrayList<Activity>();    }    /**     * 添加Activity     */    public void addActivity(Activity activity) {        // 判断当前集合中不存在该Activity        if (!activityList.contains(activity)) {            activityList.add(activity);//把当前Activity添加到集合中        }    }    /**     * 销毁单个Activity     */    public void removeActivity(Activity activity) {        //判断当前集合中存在该Activity        if (activityList.contains(activity)) {            activityList.remove(activity);//从集合中移除            activity.finish();//销毁当前Activity        }    }    /**     * 销毁所有的Activity     */    public void removeALLActivity() {        //通过循环,把集合中的所有Activity销毁        for (Activity activity : activityList) {            activity.finish();        }    }}

2.创建一个BaseActivity类,应用中所有的Activity都继承这个基类,在BaseActivity中添加一下方法

public class BaseActivity extends Activity {    private MyApplication application;    private BaseActivity oContext;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (application == null) {            // 得到Application对象            application = (MyApplication) getApplication();        }        oContext = this;// 把当前的上下文对象赋值给BaseActivity        addActivity();// 调用添加方法    }    // 添加Activity方法    public void addActivity() {        application.addActivity(oContext);// 调用myApplication的添加Activity方法    }    //销毁当个Activity方法    public void removeActivity() {        application.removeActivity(oContext);// 调用myApplication的销毁单个Activity方法    }    //销毁所有Activity方法    public void removeALLActivity() {        application.removeALLActivity();// 调用myApplication的销毁所有Activity方法    }}

3.在有退出操作的Activity类中调用removeALLActivity()方法即可

//退出系统private long exitTime = 0;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {        if((System.currentTimeMillis()-exitTime) > 2000){           Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();           exitTime = System.currentTimeMillis();        }else{           removeALLActivity();//此处调用BaseActivity中的方法释放所有activity           finish();           System.exit(0);       }       return true;   }   return super.onKeyDown(keyCode, event);}
原创粉丝点击