只是备份一下知识,下次方便找
收集活动的类
public class ActivityCollector {
public static List<Activity> activities=new ArrayList<Activity>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Activity activity){
activities.remove(activity);
}
//测试finishAll()方法在ThirdActivity中
public static void finishAll(){
for (Activity activity:activities) {
if(!activity.isFinishing()){
activity.finish();
}
}
System.exit(0);
}
}
关键点:List的增删,isFinishing方法,还有static类型函数
在每个活动创建时添加到集合里,销毁时从集合删除活动
Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this);
setContentView(R.layout.activity_main);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
在首页,按一下返回键会提示“再按一下退出”,2s内再按一下则销毁所有活动退出APP。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
if((System.currentTimeMillis()-exitTime) > 2000){
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
ActivityCollector.finishAll();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
关键点:onKeyDown方法,keyCode值判断,使用currentTimeMillis实现代码控制
总结:使用一个List集合收集所有的APP,然后在每个活动的创建和销毁中添加和删除元素,退出时使用轮询全部结束。双击退出的逻辑使用currentTimeMillis控制,第一次点击时必然出现吐司提示,并存入时间,第二次点击时判断时和第一次的时间差,非常精彩的代码结构。