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

2019-02-05  本文已影响0人  oven小区

概要:

今天在做解析和布局部分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中初始化可以节约冗余代码。

上一篇下一篇

猜你喜欢

热点阅读