博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最常用的Activity的onBackPressed()与finish()的区别
阅读量:5767 次
发布时间:2019-06-18

本文共 2437 字,大约阅读时间需要 8 分钟。

先看onBackPressed():

// 代码源于v4-24.1.1    //这个是FragmentActivity里面的代码    public void onBackPressed() {        //很明显,判断Fragment栈里面有没有回退.        //如果Fragment回退栈有还有Fragment        //则回退一次Fragment,没有才调用onBackPressedNotHandled();        if (!mFragments.getSupportFragmentManager().popBackStackImmediate()) {            onBackPressedNotHandled();        }    }-----------------------------------分割线------------------------------------------   // 这个是BaseFragmentActivityEclair里面的代码   @Override    void onBackPressedNotHandled() {        //因为新的FragmentActivity是重写的 onBackPressed() 方法        //所以在这里调用父类Activity的onBackPressed();        super.onBackPressed();    }  -----------------------------------分割线------------------------------------------   //最终走到的Activity里面的代码    public void onBackPressed() {        //这是判断ActionBar有没有什么弹出吧.        if (mActionBar != null && mActionBar.collapseActionView()) {            return;        }        //再次判断有没有回退,其实这个判断对于继承FrgamentActivity的来说是没意义的,        //对于继承Activity的来说是有意义的        if (!mFragments.getFragmentManager().popBackStackImmediate()) {            finishAfterTransition();        }    }    //如果没有回退了,调用    public void finishAfterTransition() {          //这里是判断有没有设置回退动画啥的以及退出Activity的处理.          //代码很多,不管这个判断是true还是false,最终都会调用finish();          if (!mActivityTransitionState.startExitBackTransition(this)) {              finish();          }    }复制代码

版本不同的sdk,可能会有出入


//FragmentActivity的onKeyDown()    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (android.os.Build.VERSION.SDK_INT < 5 /* ECLAIR */                && keyCode == KeyEvent.KEYCODE_BACK                && event.getRepeatCount() == 0) {            // Take care of calling this method on earlier versions of            onBackPressed();            return true;        }        return super.onKeyDown(keyCode, event);    }    //Activity的onKeyDown()   public boolean onKeyDown(int keyCode, KeyEvent event)  {        if (keyCode == KeyEvent.KEYCODE_BACK) {            if (getApplicationInfo().targetSdkVersion                    >= Build.VERSION_CODES.ECLAIR) {                event.startTracking();            } else {                onBackPressed();            }            return true;        }        .....其他代码省略}查看Activity的onKeyDown()的源码,可以发现,按返回键是默认调用的onBackPressed();复制代码

总结

如果使用onBackgress(),假如你的Activity有添加管理frgament回退的话,调用该方法是不会退出Activity的.直到Fragment回退栈清空,才会退出Activity.
如果使用finish(),那么就会直接退出Activity

转载地址:http://wbbux.baihongyu.com/

你可能感兴趣的文章
银行、券商们的下一代App该往哪里走?
查看>>
【数据库】阿里云分析型数据库基本认识
查看>>
编程珠玑:向量旋转(旋转交换)
查看>>
防火墙
查看>>
手动释放Linux内存
查看>>
bashrc和profile区别,su和su -区别
查看>>
/etc/resolv.conf文件自动恢复配置问题
查看>>
CENTOS 6.2 系统网卡更换后的设置方法
查看>>
Centos Minimal网络配置
查看>>
MFC文件夹以及目录常见操作
查看>>
OSPF的认证
查看>>
js格式化货币数据实现代码
查看>>
通过linux的shell脚本批量处理交换机配置变更
查看>>
怎样用代码执行退出终止App
查看>>
JAVA的StringBuffer类
查看>>
Yii2.0 的COOKIE和SESSION用法
查看>>
Linux下修改时区的方法
查看>>
Spring MVC AOP通过注解方式拦截Controller等实现日志管理
查看>>
Gcc 连接静态库使用 -lxxxx xxxx为库名字
查看>>
《都市侠盗》中的Parker,原来客串过《老爸老妈浪漫史》。
查看>>