当前位置: 首页 > news >正文

android finish 判断当前_最常用的Activity的onBackPressed()与finish()的区别.

先看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

相关文章:

  • 一切艺术与伟业的奥妙——专心!
  • axis1 c# 接口 调用_Tomcat6.0+Jdk1.5+Axis1.3搭建java webservice环境,并使用c#调用该服务。...
  • 开发基于ASP.NET的自定义日志系统
  • mysql 几级缓存_mysql缓存:一级缓存和二级缓存
  • HTTP 1.1与HTTP 1.0的比较
  • mysql 中一个表里有父子关系_SQLAlchemy - 同一个表中的父子关系
  • c mysql锁_mysql三种锁
  • 文献管理软件使用[keep updating]
  • The 25 Worst Tech Products of All Time
  • 电脑mac地址会变吗_怎么查询电脑mac地址
  • mysql 以非root启动_非root权限安装mysql启动问题
  • 比较 Microsoft Update, Windows Server Update Services, 和 SMS
  • python顺序执行 toggle_python – 将CellRendererToggle的单行设置为不一致
  • C#农历
  • c#如何读INI文件中的设置信息
  • 【React系列】如何构建React应用程序
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angularjs之国际化
  • canvas 五子棋游戏
  • Docker容器管理
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java超时控制的实现
  • Joomla 2.x, 3.x useful code cheatsheet
  • ng6--错误信息小结(持续更新)
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • React系列之 Redux 架构模式
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • unity如何实现一个固定宽度的orthagraphic相机
  • WePY 在小程序性能调优上做出的探究
  • 从PHP迁移至Golang - 基础篇
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 那些年我们用过的显示性能指标
  • 前嗅ForeSpider采集配置界面介绍
  • 嵌入式文件系统
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 用简单代码看卷积组块发展
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 走向全栈之MongoDB的使用
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • k8s使用glusterfs实现动态持久化存储
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (1)(1.13) SiK无线电高级配置(五)
  • (12)目标检测_SSD基于pytorch搭建代码
  • (poj1.3.2)1791(构造法模拟)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (笔试题)分解质因式
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (四)汇编语言——简单程序