点击回退键
通常的,我们点击返回键,如果我们没有做特殊处理,那么我们的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);
当点击回退键时,如果没有特殊处理,Activity通常会被销毁。在onKeyUp事件中,如果检测到的是BACK键并且事件未被取消,会调用onBackPressed。在此方法中,系统会尝试销毁当前栈顶的Fragment或者结束Activity。如果Activity是任务栈的根Activity,系统会拦截并处理回退请求。要实现双击退出,可以在onBackPressed中添加逻辑。另外,调用moveTaskToBack(true)可以将Activity移动到后台,而不会立即销毁。
3万+

被折叠的 条评论
为什么被折叠?



