本文主要是介绍onBackPressed、onKeyDown、finish、onDestroy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
监听返回键的两种方式:
// 捕获返回键的方法1 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {// 按下BACK,同时没有重复 Log.d(TAG, "onKeyDown()");}return super.onKeyDown(keyCode, event);}// 捕获返回键的方法2 @Overridepublic void onBackPressed() {Log.d(TAG, "onBackPressed()");super.onBackPressed();}
onBackPressed与onKeyDown区别:
相同点:
最终都会调用finish方法
不同点:
onBackPressed适用于api小于5(Android2.0),且按back键,无重复
onKeyDown适用于Android2.0或更新版的sdk
onBackPressed与finish区别:
如果使用onBackPressed(),假如你的Activity有添加管理frgament回退的话,调用该方法是不会退出Activity的.直到Fragment回退栈清空,才会退出Activity。
如果使用finish(),那么就会直接退出Activity。
Activity中finish() onDestroy() 和System.exit()的区别
Activity.finish()
Call this when your activity is done and should be closed.
在你的activity动作完成的时候,或者Activity需要关闭的时候,调用此方法。
当你调用此方法的时候,系统只是将最上面的Activity移出了栈,并没有及时的调用onDestory()方法,其占用的资源也没有被及时释放。
因为移出了栈,所以当你点击手机上面的“back”按键的时候,也不会再找到这个Activity。
Activity.onDestory()
the system is temporarily destroying this instance of the activity to save space.
系统销毁了这个Activity的实例在内存中占据的空间。
在Activity的生命周期中,onDestory()方法是他生命的最后一步,资源空间等就被回收了。当重新进入此Activity的时候,必须重新创建,执行onCreate()方法。
System.exit(0)
这玩意是退出整个应用程序的,是针对整个Application的。将整个进程直接KO掉。
finish函数仅仅把当前Activity退出了,但是并没有释放他的资源。
安卓系统自己决定何时从内存中释放应用程序。
当系统没有可用内存到时候,会按照优先级,释放部分应用。
源码探索:
1 点击 super.onKeyDown(keyCode, event);
public boolean onKeyDown(int keyCode, KeyEvent event) {if(VERSION.SDK_INT < 5 && keyCode == 4 && event.getRepeatCount() == 0) {//onBackPressed适用于api小于5(Android2.0),且按back键,无重复this.onBackPressed();return true;} else {//onKeyDown适用于Android2.0或更新版的sdkreturn super.onKeyDown(keyCode, event);}}
1.1 点击查看 this.onBackPressed();方法:
public void onBackPressed() {if(!this.mFragments.getSupportFragmentManager().popBackStackImmediate()) {this.supportFinishAfterTransition();}}
1.1.1 点击this.supportFinishAfterTransition();方法
public void supportFinishAfterTransition() {ActivityCompat.finishAfterTransition(this);}
1.1.1.1 点击ActivityCompat.finishAfterTransition(this);方法
public static void finishAfterTransition(Activity activity) {if(VERSION.SDK_INT >= 21) {//api大于等于21ActivityCompat21.finishAfterTransition(activity);} else {activity.finish();}}
1.1.1.1.1 点击ActivityCompat21.finishAfterTransition(activity);方法
public static void finishAfterTransition(Activity activity) {activity.finishAfterTransition();}
1.1.1.1.1.1 点击activity.finishAfterTransition();方法
public void finishAfterTransition() {if (!mActivityTransitionState.startExitBackTransition(this)) {finish();}}
这篇关于onBackPressed、onKeyDown、finish、onDestroy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!