只是備份一下知識,下次方便找
收集活動的類
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控制,第一次點擊時必然出現吐司提示,並存入時間,第二次點擊時判斷時和第一次的時間差,非常精彩的代碼結構。