一键退出+再按一次退出的小实践
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中初始化可以节约冗余代码。