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

本文共 2667 字,大约阅读时间需要 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            // the platform where it doesn't exist.            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();复制代码

总结

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

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

你可能感兴趣的文章
阿里云游戏服务器价格-阿里云游戏服务器多少钱
查看>>
Gigamon全面产品系列增强技术领先优势
查看>>
免费申请基于飞腾硬件平台上的麒麟云试用!
查看>>
Linux内核通用队列的使用笔记(读linux内核设计与实现)
查看>>
摩拜AI大数据平台“魔方”发布黄金周骑行预测,加州开发 AI 智能公寓
查看>>
javascript的队列,优先队列,循环队列
查看>>
企业加快云计算应用的十大理由
查看>>
ACID
查看>>
centOS6.4 oracle11g RAC搭建
查看>>
ZABBIX作集中式NGINX性能监控的注意要点
查看>>
《数据虚拟化:商务智能系统的数据架构与管理》一 2.9 报告和分析的新形式...
查看>>
2017年Q2美国新增光伏装机2.4GW 同比增长8%
查看>>
中国人工智能学会通讯——一张图看懂BP算法 1.4 致谢
查看>>
《社交网站界面设计(原书第2版)》——第2章 2.0社交的核心
查看>>
直击英特尔IDF16:加速万物智能互联世界到来
查看>>
《中国人工智能学会通讯》——6.26 走向深度
查看>>
硅谷人工智能专家加盟销售易 为AI+CRM打开想象空间
查看>>
看虎牙Miss直播时最难受的是什么?
查看>>
中国人工智能学会通讯——一种基于众包的交互式数据修复方法 2 前期工作和问题陈述...
查看>>
几个面试经典算法题Java解答
查看>>