惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
量子位
B
Blog RSS Feed
Schneier on Security
Schneier on Security
L
LINUX DO - 最新话题
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
N
News | PayPal Newsroom
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
PCI Perspectives
PCI Perspectives
aimingoo的专栏
aimingoo的专栏
D
Docker
T
The Exploit Database - CXSecurity.com
Last Week in AI
Last Week in AI
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
Vercel News
Vercel News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
J
Java Code Geeks
O
OpenAI News
C
Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Help Net Security
Help Net Security
Scott Helme
Scott Helme
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
V
V2EX
P
Proofpoint News Feed
Simon Willison's Weblog
Simon Willison's Weblog
A
About on SuperTechFans
S
Securelist
G
Google Developers Blog
Cyberwarzone
Cyberwarzone
The GitHub Blog
The GitHub Blog

博客园 - jlxuqiang

左手信仰,右手长剑 Cheat Sheet 《高级语言程序设计》课程指导 第 23 章 深入学习 intent 和任务 (选讲) 第 22 章 Master-Detail 用户界面 第 21 章 隐式 intent 12 信息2班 《基于Android的软件开发》课程成绩 test 13 信息2班 《安卓程序设计基础》课程成绩 第 20 章 相机 II:拍摄并处理照片 第 19 章 相机 I:取景器 第 18 章 上下文菜单与上下文操作模式 第 17 章 存储与加载本地文件 第 16 章 工具栏 第 15 章 应用本地化 第 13 章 使用 MediaPlayer 播放音频 第 12 章 对话框 第 11 章 使用 ViewPager 第 10 章 使用 fragment argument
第 14 章 fragment 的保留
jlxuqiang · 2015-08-25 · via 博客园 - jlxuqiang

请参考教材,全面理解和完成本章节内容... ...

复制工程ch13,将工程目录改名为ch14。

当前,HelloMoon应用对设备旋转的处理还不够完善。运行HelloMoon应用,播放音频,然后旋转设备。音频播放会嘎然而止。

设备旋转后,HelloMoonActivity随即被销毁。与此同时,负责销毁HelloMoonFragment的FragmentManager立即逐一调用fragment的生命周期方法,即onPause()、onStop()和OnDestroy()方法。我们知道,HelloMoonFragment.onDestroy()方法被调用后,MediaPlayer实例即被释放,结果导致了音频播放的停止。

在本书的第3章,我们通过覆盖Activity.onSaveInstanceState(Bundle)方法,修复了GeoQuiz应用的设备旋转相关问题。设备旋转后,新产生的activity读取保存的数据,然后恢复到旋转前的状态。Fragment具有相同功能的onSaveInstanceState(Bundle)方法。然而,就算保存了MediaPlayer对象的状态并在随后恢复,音频播放仍会中断。这显然会惹恼用户。

14.1 保留 fragment 实例

幸运的是,为应对设备配置的变化,可使用fragment的一个特殊方法来确保MediaPlayer实例一直存在。覆盖HelloMoonFragment.onCreate()方法并设置fragment的属性值,如代码清单14-1所示。

代码清单14-1 调用setRetainInstance(true)方法(HelloMoonFragment.java)

image

fragment的retainInstance属性值默认为false。这表明其不会被保留。因此,设备旋转时fragment会随托管activity一起销毁并重建。调用setRetainInstance(true)方法可保留fragment。已保留的fragment不会随activity一起被销毁。相反,它会被一直保留并在需要时原封不动的传递给新的activity。

对于已保留的fragment实例,其全部实例变量(如mPlayButton、MPlayer和mStopButton)值也将保持不变,因此可放心继续使用。

运行HelloMoon应用。播放音频,然后旋转设备,可看到音频的播放丝毫未受影响。

14.2 设备旋转与保留的 fragment

请参考教材,全面理解和完成后续内容... ...