android 弹窗 onpause,Android 下拉通知栏时Activity的生命周期——重新理解onPause()

下拉通知栏时发生了什么

在某个APP中,发现下拉通知栏的时候,正在播放的视频会暂停,于是有点好奇这段操作是不是在生命周期中实现的。在网上众多关于Activity生命周期的讨论中,很多人认为onPause()和onStop()的区别就是“部分遮挡”和“全部遮挡”,那按照这个猜测来分析一下这个过程:

首先,通知栏下拉一点点,符合一般描述中“Activity被部分遮挡”——onPause()

然后,通知栏完全落下之后,“Activity被全部遮挡”——onStop()

于是自己写了一个实例来验证:

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.i(TAG, "onCreate");

}

@Override

protected void onStart() {

super.onStart();

Log.i(TAG, "onStart");

}

@Override

protected void onResume() {

super.onResume();

Log.i(TAG, "onResume");

}

@Override

protected void onPause() {

super.onPause();

Log.i(TAG, "onPause");

}

@Override

protected void onStop() {

super.onStop();

Log.i(TAG, "onStop");

}

@Override

protected void onDestroy() {

super.onDestroy();

Log.i(TAG, "onDestroy");

}

}

启动APP时,毫无疑问,调用了onCreate()→onStart()→onResume();

完全下拉通知栏,然后上拉通知栏,发现没有日志打印,说明下拉通知栏对Activity的生命周期没有影响。

其他的“部分遮挡”——AlertDialog、Toast

经过测试不难发现,在Activity中弹出AlertDialog、Toast时,Activity的onPause()并没有调用;笔者还尝试在MIUI系统中唤醒小爱同学,发现onPause()仍然没有被调用。

但是在以下特殊的情况下,onPause()会被调用:

自定义dialog继承自Activity

新启动的Activity主题设置为 android:theme=@android:style/Theme.Dialog

重新理解onPause()

跑去看文档发现了如下信息:

Method

Description

onPause()

Called when the system is about to start resuming a previous activity. This is typically used to commit unsaved changes to persistent data, stop animations and other things that may be consuming CPU, etc. Implementations of this method must be very quick because the next activity will not be resumed until this method returns.

Followed by either onResume() if the activity returns back to the front, or onStop() if it becomes invisible to the user.

发现了onPause()和Activity的奇妙联系,就不难理解之前为什么没有被调用的问题了。

查看AlertDialog和Toast的源码,可以发现它们显示的原理,都是通过WindowManager.addView()来显示的。也就是说,AlertDialog和Toast可以看做是当前Activity的一部分View,当然也不会对Activity的生命周期构成影响。

因此,onPause()是否调用的关键就是,是否有另一个Activity参与进来了。

而网上流传甚广的onPause()和onStop()调用中提到的“遮挡”,应该修正为“被Activity遮挡”

至于官方文档中提到的,onPause()之后会调用onStop()或者onResume(),前者很好理解,一般的退出、新启动一个全屏Activity、锁屏、返回HOME等操作都是这种情况;至于后者,笔者能想到的情况就是,弹出部分遮挡的Activity类型的对话框,然后按返回键。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5文章页面,文章页面的设计《 HTML5 与 Bootstrap 应用实例 》

文章页面的设计跟主页差不多,页头,底部边栏,还有页脚都是一样的,不同是,页面的主内容区域分成两部分 ... 左边占用 8 个网格宽度,显示文章的内容,比如标题,正文,文章的评…

qwebkit 服务器调用本地html方法,用qt的QWebkit类调用谷歌地图

先说下,我这悲剧的一天,用qt5.0.2这个版本搞了一个上午都没有搞出来,无赖呀。。。突然想了下,还是换个版本吧!就用qt4.7.4版本了,哎哟喂,居然就调出来了呢!其实网上的文章大多是复制…

win7设置定时锁定计算机,Win7系统锁定计算机怎么设置?Win7系统锁定计算机的设置方法...

相信大家都知道,长时间不操作计算机,计算机就会自动进入锁定状态,不过,最近有Win7系统用户表示不想让计算机自动进入锁定状态。那么,Win7系统锁定计算机怎么设置呢?下面,我们就一起往下看看Win7…

计算机考试用英语怎么说,“全国大学生计算机等级考试一级”英语怎么说?

“全国大学生计算机等级考试一级”的英文:National College Computer Grade Examination Level 1examination 读法 英 [ɪg,zmɪneɪʃ(ə)n; eg-] 美 [ɪgzməneʃən]作名词的意思是: 考试;检查;查问短语:1、medica…

计算机专业在湖南录取分数,计算机科学与技术专业分数线各大学排名(湖南)

摘要:导读:计算机科学与技术专业分数线多少?招生考试网小编根据各个大学在湖南的录取分数线,整理了 计算机科学与技术专业分数线排名 供填报志愿的考生和家长参考: 计算机科学与技术专导读:计算机科学与技术…

rr计算机专业英语,《计算机专业英语》电子教本8.pdf

《计算机专业英语》电子教本8Chapter 1 The History and Future of ComputersChapter 1 The History and Future of ComputersCChhaapptteerr 11 TThhee HHiissttoorryy aanndd FFuuttuurree ooff CCoommppuutteerrssKey points:Key points:KKeeyy ppooiinnttss::Key points:Ke…

win8 必须重新启动计算机才能关闭用户账户控制,windows8中怎么关闭用户账户控制(UAC)仅针对单个用户...

1、登陆 Windows 8 Metro 界面,单击左下角桌面图标,如下图:2、登录桌面后,使用组合热键“Windows X键”调出快捷菜单(如果桌面已经调出控制面板图标,直接双击打开),左键单击控制面板,如下图&am…

计算机硬件在线修复,计算机硬件维修

计算机硬件维修没人能保证自己的电脑不出故障,电脑和其故障就像人和影子,你不知道它什么时候会出现在你的眼前:“昨天晚上还好好的,今天突然就开不了机了。”第一花费不少,第二耽误时间。如果你了解这些故障的原因&…

Objective-c格式化输出格式

Objective-c格式化输出格式:%Objective-C object, printed as the string returned by descriptionWithLocale: if available, or description otherwise. Also works with CFTypeRef objects, returning the result of the CFCopyDescription function.%%% character.%d, %DSi…

在计算机网络中发送电子邮件遵循的协议是,一、计算机网络刷题

connect函数返回错误ECONNREFUSED:如果对客户的SYN的响应是RST,则表明该服务器主机在我们指定的端口上没有进程在等待与之连接(例如服务器进程也许没有启动),这称为硬错(hard error),客户一接收到RST,马上就返回错误ECONNREFUSED.…

JSON特殊字符处理

1.json结构中使用的标示符:都为英文格式冒号 :双引号 ""大括号 {}方括号 []逗号 ,2.使用注意要确保在json的结构中,使用以上标准的标示符来构建结构。其中的键值串都由双引号引起来,键值串中不能包含双引号和转义字符。在键值…

常用Mac小命令

Lion显示资料库:chflags nohidden /Users/用户名/Library消除Dock隐藏延迟:defaults write com.apple.Dock autohide-delay -float 0 && killall Dock

iOS开发内存管理总结

一、retain、copy、assign的区别:1.retain:当对一个对象A调用retain,然后赋值给B时,对象的引用计数加1,A和B指向同一个内存地址。2.copy:当对一个对象A调用retain,然后赋值给B时,对象…

微型计算机的应用特点,微型计算机的特点及应用

微型计算机的特点及应用计算机基础知识,1.1 走进计算机世界 计算机的发展历史 微型计算机的特点及应用 1.2 计算机是如何工作的 计算机的硬件组成 计算机的软件系统 1.3 计算机外部设备 计算机的存储设备 输入输出设备 1.4 计算机安全规范,(2)按功能分类,按功能分类一般可分为专…

田野中科院计算机网络信息中心,中国科学院计算机网络信息中心硕士生导师田野...

姓名:田野性别:男职称:副研究员专家类别:副高级邮编:100190邮箱:tianyecnic.cn通讯地址:北京市海淀区中关村南四街4号简历:田野,男,1979年6月生,博…

扩展函数不能返回空值html,JavaScript程序设计-中国大学mooc-题库零氪

第1章 JavaScript初探JavaScript简介随堂测验1、JavaScript由哪三部分组成( )A、ECMAScriptB、BOMC、CSSD、DOMJavaScript相关应用随堂测验1、以下哪个选项是JavaScript技术特性?( )A、跨平台性B、解释型脚本语言C、基于对象的语言D、具有以上各种功能HBuilder的快速…

西安邮电大学计算机学院学生会,2017年度计算机学院教职工代表大会工作报告.doc...

PAGE \* MERGEFORMAT 51凝心聚力,开拓创新,以主人翁的工作态度共谋计算机学院新发展2017/2018学年计算机学院教代会学院工作报告王忠民各位代表:大家下午好!今天,我们在这里召开计算机学院教职工代表大会,回…

电子数字计算机最早应用于哪个领域,2013计算机一级B考试模拟试题及答案(2)...

无忧考网为大家收集整理了《2013计算机一级B考试模拟试题及答案(2)》供大家参考,希望对大家有所帮助!!!1).已知“装”字的拼音输入吗是“zhang”,而“大”字的拼音输入码是“da”,它们的国标码的长度的字节…

计算机管理扫不出我的独显,win10正式版系统下检测不到独立显卡的解决方法

通常很多电脑中都会有独立显卡,具备单独的显存,不占用系统内存,而且技术上领先于集成显卡,能够提供更好的显示效果和运行性能,然而有win10正式版系统用户却反应说遇到检测不到独立显卡的情况,但是自己电脑明…

北大计算机考研题一般出自哪里,北大计算机考研常见问题解答

北大计算机考研常见问题解答高校 免费考研论坛/2007-04-11原文内容来自免费考研论坛,请点击查看全文http://bbs.freekaoyan.com/viewthread.php?tid123937Q: 我想了解关于北大计算机(以下简称PKUCS)考研的基本情况、数据、规则,怎么办?A: 请…