@Override public 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 @Override public 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或更新版的sdk return 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大于等于21
            ActivityCompat21.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();
                    监听返回键的两种方式:    // 捕获返回键的方法1      @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {            // 按下
				
目录概述onBackPressed()的原定义onBackPressed()的重写重写onBackPressed()的完整代码  onBackPressed()是用户点击Back键时系统调用的方法,用于从当前Activity返回到上一个Activity。在代码中调用此方法也会起到“按”Back键的效果。可以重写此方法以达到自定义目的。 onBackPressed()的原定义  onBackP...
我容易不区分 onDestroy 、onBackpress、onFinish。 其实,可以这样理解: (1)onDestory 的使用,是销毁了activity的实例在内存所占的空间   在activity生命周期中,onDestory是生命的最后一步,资源回被回收 (2)onFinish 在activity动作完成时,activity关闭时,若被调用,只是... @Override public void onBackPressed() { String titleStr = edittitle.getText().toString(); String contentStr = editcontent.getText().toString(); if (...
问题:onBackPressed导致FragmentActivity重启描述:HomeActivity和MyTsyActivity是FragmentActivity的两个子类。从HomeActivity跳转到MyTsyActivity很流畅,没有出现任何问题。Intent intent = new Intent(context, MyTsyActivity.class);     @Override     public boolean onKeyDown(int keyCode, KeyEvent event) {         if (keyCode == KeyEvent.KEYCODE_BACK) {             //如果点击的是后退键  首先判断webView是否能够后退             //如果点
finish(),用的最多的一个关闭当前activity的方法。 onBackPressed(),平时不怎么用,是android返回按钮调用的一个方法。 一般来说,这两个方法的作用是一致的。 但是在我使用共享变换的时候-Shared Element Transition 发现使用finish(),将无法实现返回上一层的共享变换,必须使用onBackPressed(),才能实现。 Android通过代码实现多语言切换、createConfigurationContext、attachBaseContext、getResources、updateConfiguration android 通过adb shell命令旋转Android屏幕朝向