点击回退键
通常的,我们点击返回键,如果我们没有做特殊处理,那么我们的activity会被销毁,那他是怎么实现的呢
在监听onkeyUP事件上,我们发现父类的处理是这样的,如果是back事件,会走onBackPressed
public boolean onKeyUp(int keyCode, KeyEvent event) { if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.ECLAIR) { if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking() && !event.isCanceled()) { onBackPressed(); return true; } } return false; }
public void onBackPressed() { if (mActionBar != null && mActionBar.collapseActionView()) { return; } FragmentManager fragmentManager = mFragments.getFragmentManager(); if (!fragmentManager.isStateSaved() && fragmentManager.popBackStackImmediate()) { return; } if (!isTaskRoot()) { // If the activity is not the root of the task, allow finish to proceed normally. finishAfterTransition(); return; } try { // Inform activity task manager that the activity received a back press // while at the root of the task. This call allows ActivityTaskManager // to intercept or defer finishing. ActivityTaskManager.getService().onBackPressedOnTaskRoot(mToken, new IRequestFinishCallback.Stub() { public void requestFinish() { mHandler.post(() -> finishAfterTransition()); } }); } catch (RemoteException e) { finishAfterTransition(); } }
finishAfterTransition 会调用finish 实现销毁
public void finishAfterTransition() { if (!mActivityTransitionState.startExitBackTransition(this)) { finish(); } }
通常我们在app需要实现点击两次退出的,可以在onPressed中做文章
调用finish()
首先我们在Activity的任意时机都可以通过调用finish来实现对一个activity的退出
只想退出,不想走onDestroy
-
moveTaskToBack(true); 推荐 一般在MainActivity实现
- 调用回到home实现 Intent setIntent = new Intent(Intent.ACTION_MAIN);
setIntent.addCategory(Intent.CATEGORY_HOME);
setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(setIntent);