android 退出系统的解决办法

7 篇文章 0 订阅

我们都知道,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;
@Override
public 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);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值