请教一个 android 生命周期的问题

2020-11-03 14:32:56 +08:00
 qwertyegg

app 有一个门帘 ActivityOne,会进行一些初始化工作,完成后会进入 app 的主要 Activity,名叫 ActivityTwo

如果在这时,把程序放入后台,长时间的休眠后,回到这个 app,会回到 ActivityTwo

在此时如果我用后退键,会回到 ActivityOne

我的问题是,因为长时间休眠,ActivityOne 会再次调用 onCreate(),我的理解是 ActivityOne 因为休眠被系统干掉了。我有一段初始化的代码,是在 ActivityOne 的 onCreate()里面运行的,可是很显然,我并不希望在 app 从后台唤醒后再次运行这段初始化的代码

我该怎么办呢?

1268 次点击
所在节点    程序员
10 条回复
qwertyegg
2020-11-03 14:45:23 +08:00
查了下资料,是不是我在 onCreate()里面检查 savedInstanceState != null 就可以判断这个 ActivityOne 是被系统销毁后重新造的。
MaL
2020-11-03 15:39:57 +08:00
ActivityOne 用不到了,不调 finish()么?
hikari2
2020-11-03 16:54:14 +08:00
什么手机,有的手机启动程序的时候只启动你的程序,然后你的程序根据你的 manifest 启动你的 LAUNCHER Activity,有的手机会找到你的程序的 LAUNCHER Activity,然后启动你的 activity,这两个从现象上没什么区别。这个是我满满摸索发现的。
kiroter
2020-11-03 18:44:41 +08:00
finish
qwertyegg
2020-11-04 00:45:33 +08:00
@MaL
@kiroter

谢谢回复,ActivityOne 并非用不到,因为正常情况下,从 ActivityOne 切换到 ActivityTwo 后,希望 ActivityOne 会在 Activity Stack 上(不知道这么说对不对)。这时可以按 back 键回到 ActivityOne.而从睡眠中唤醒后(此时在 ActivityTwo),按了 back 键也会回到 ActivityOne,但是观察到 ActivityOne 已经被系统销毁,所以会重新调用 onCreate()。

我查到的办法是用 savedInstanceState != null 是否被系统销毁,然后在 onCreate()里面判断是否重新初始化。finish()按照开发文档说法是不需要 ActivityOne,需要将其关闭的时候调用。
qwertyegg
2020-11-04 00:47:17 +08:00
@hikari2 谢谢指导,手机是 pixel 3a,我的问题不在于启动程序,而是迷惑于程序在后台被唤醒后(还被杀了 Activity)的行为。
devfeng
2020-11-04 04:03:09 +08:00
想不到这是啥场景。你 back 回到 activityone,再自动跳到 activitytwo 吗
qwertyegg
2020-11-04 04:14:01 +08:00
@devfeng 那段初始化代码会自动跳到 ActivityTwo 。当我用 back 按键从 ActivityTwo 回到 ActivityOne 的时候,并不想重新初始化
whenwind
2020-11-04 09:41:28 +08:00
Activity 最好不要作为流程的控制和记录来使用,因为你永远不知道系统会在什么时候给你杀掉。
如果有需要用到类似跳过 ActivityOne 直达 ActivityTwo 的话我会用 Service,Activity 的行为以 Service 上储存的数据为准,ActivityOne 在询问 Service 已经初始化过了就不执行初始化代码直接进入 ActivityTwo,休眠回来 ActivityTwo 按下返回键询问 Service,如果已经执行过初始化就不执行返回。
如果不希望使用 Service 的话那把部分初始化代码放在 ActivityTwo 的 onCreate 呢?
demo06
2020-11-04 10:30:39 +08:00
你在 1 里面跳转 代码后面加个 finish(),貌似 2 就不会再返回 1 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/721376

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX