只是备份一下知识,下次方便找
收集活动的类
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控制,第一次点击时必然出现吐司提示,并存入时间,第二次点击时判断时和第一次的时间差,非常精彩的代码结构。