開發過程中 需要退出APP,這個時候 就需要對退出進行處理 。我最常用的是兩種方式,第一種方式是:建立一個全局容器類將activity都保存起來,退出時候遍歷所有的activity
第二種方式是建立廣播,當我退出的時候發送一個退出廣播。
第一種方式 定義BaseActivity 如下代碼:
@Override PRotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 添加Activity到堆棧 AtyContainer.getInstance().addActivity(this); } @Override protected void onDestroy() { super.onDestroy();// 結束Activity&從棧中移除該Activity AtyContainer.getInstance().removeActivity(this); }}class AtyContainer { private AtyContainer() { } private static AtyContainer instance = new AtyContainer(); private static List<Activity> activityStack = new ArrayList<Activity>(); public static AtyContainer getInstance() { return instance; } public void addActivity(Activity aty) { activityStack.add(aty); } public void removeActivity(Activity aty) { activityStack.remove(aty); } /** * 結束所有Activity */ public static void finishAllActivity() { for (int i = 0, size = activityStack.size(); i < size; i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } Log.d("調用finfshAllactivity", "-------------------"); activityStack.clear(); }在MainActivity 里面繼承BaseActivity 實現如下代碼:
private boolean isExit = false;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // Toast.makeText(this, "點擊兩次離開", Toast.LENGTH_SHORT).show(); ToQuitTheApp(); return false; } else { return super.onKeyDown(keyCode, event); }}//封裝ToQuitTheApp方法private void ToQuitTheApp() { if (isExit) { finishAllActivity(); } else { isExit = true; Toast.makeText(MainActivity.this, "再按一次退出APP", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 3000);// 3秒后發送消息 }}//創建Handler對象,用來處理消息Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) {//處理消息 // TODO Auto-generated method stub super.handleMessage(msg); isExit = false; }};這個時候 即可優雅退出 。
第二種方式 定義BaseActivity 代碼如下
private static final String EXITACTION = "action.exit";private ExitReceiver exitReceiver = new ExitReceiver();@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction(EXITACTION); registerReceiver(exitReceiver, filter);}@Overrideprotected void onDestroy() { super.onDestroy(); unregisterReceiver(exitReceiver);}public class ExitReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "廣播方式離開", Toast.LENGTH_SHORT).show(); BaseActivity2.this.finish(); }}同樣在MainActivity里面 這樣處理
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { ExitReceiver exit=new ExitReceiver(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); exit.onReceive(MainActivity.this,intent); return super.onKeyDown(keyCode, event);}github 地址:https://github.com/yuanchongzhang/activity_exit
新聞熱點
疑難解答