美文网首页
一键退出+再按一次退出的小实践

一键退出+再按一次退出的小实践

作者: oven小区 | 来源:发表于2019-02-05 10:56 被阅读0次

    概要:

    今天在做解析和布局部分orz,记录一个小技巧(虽然没有什么用×

    实践:

    在各activity里重写onBackPressed方法

    public void onBackPressed() {
    
            ActivityCollector.finishAll();
            Toast.makeText(ChooseAreaActivity.this,"再按一次退出",Toast.LENGTH_SHORT).show();
    }
    

    建立活动管理器 ActivityCollector 和 baseActivity,分别用于管理所有 activity ,以及用于向活动管理器添加 activity
    可以实现全局一键退出

    public class ActivityCollector {
        private static long lastPressTime = 0;
    
        public static List<Activity> activities = new ArrayList<>();
    
        public static void addActivity(Activity activity) {
            activities.add(activity);
        }
    
        public static void removeActivity(Activity activity) {
            activities.remove(activity);
        }
    
        public static void finishAll() {
    
            //判断两次按下返回键的间隔时间,若小于1000毫秒,则结束程序
            if (new Date().getTime() - lastPressTime < 1000) {
                for (Activity activity : activities) {
                    if (!activity.isFinishing()) {
                        activity.finish();
                    }
    
                }
            } else {
                lastPressTime = new Date().getTime();//重置lastPressTime
    
    
            }
    
        }
    }
    

    新建 BaseActivity 继承 AppCompatActivity

    public class BaseActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityCollector.addActivity(this);
        }
        @Override
        protected void onDestroy() {
            super.onDestroy();
            ActivityCollector.removeActivity(this);
        }
    
    }
    

    showToast

    在baseActivity中加入

    public void showToast(String errorMsg) {
            Toast.makeText(this, errorMsg, Toast.LENGTH_SHORT).show();
        }
    

    在继承baseAcitivity的activity中,

    showToast("警告!");
    

    总结:
    这个活动管理器 + baseactivity可以用于一些适用于全局的设置,比如在使用butterknife时将unbinder在baseacitity中初始化可以节约冗余代码。

    相关文章

      网友评论

          本文标题:一键退出+再按一次退出的小实践

          本文链接:https://www.haomeiwen.com/subject/yhxvsqtx.html