app 有一个门帘 ActivityOne,会进行一些初始化工作,完成后会进入 app 的主要 Activity,名叫 ActivityTwo
如果在这时,把程序放入后台,长时间的休眠后,回到这个 app,会回到 ActivityTwo
在此时如果我用后退键,会回到 ActivityOne
我的问题是,因为长时间休眠,ActivityOne 会再次调用 onCreate(),我的理解是 ActivityOne 因为休眠被系统干掉了。我有一段初始化的代码,是在 ActivityOne 的 onCreate()里面运行的,可是很显然,我并不希望在 app 从后台唤醒后再次运行这段初始化的代码
我该怎么办呢?
1
qwertyegg OP 查了下资料,是不是我在 onCreate()里面检查 savedInstanceState != null 就可以判断这个 ActivityOne 是被系统销毁后重新造的。
|
2
MaL 2020-11-03 15:39:57 +08:00 via Android
ActivityOne 用不到了,不调 finish()么?
|
3
hikari2 2020-11-03 16:54:14 +08:00
什么手机,有的手机启动程序的时候只启动你的程序,然后你的程序根据你的 manifest 启动你的 LAUNCHER Activity,有的手机会找到你的程序的 LAUNCHER Activity,然后启动你的 activity,这两个从现象上没什么区别。这个是我满满摸索发现的。
|
4
kiroter 2020-11-03 18:44:41 +08:00
finish
|
5
qwertyegg OP @MaL
@kiroter 谢谢回复,ActivityOne 并非用不到,因为正常情况下,从 ActivityOne 切换到 ActivityTwo 后,希望 ActivityOne 会在 Activity Stack 上(不知道这么说对不对)。这时可以按 back 键回到 ActivityOne.而从睡眠中唤醒后(此时在 ActivityTwo),按了 back 键也会回到 ActivityOne,但是观察到 ActivityOne 已经被系统销毁,所以会重新调用 onCreate()。 我查到的办法是用 savedInstanceState != null 是否被系统销毁,然后在 onCreate()里面判断是否重新初始化。finish()按照开发文档说法是不需要 ActivityOne,需要将其关闭的时候调用。 |
6
qwertyegg OP @hikari2 谢谢指导,手机是 pixel 3a,我的问题不在于启动程序,而是迷惑于程序在后台被唤醒后(还被杀了 Activity)的行为。
|
7
devfeng 2020-11-04 04:03:09 +08:00 via Android
想不到这是啥场景。你 back 回到 activityone,再自动跳到 activitytwo 吗
|
8
qwertyegg OP @devfeng 那段初始化代码会自动跳到 ActivityTwo 。当我用 back 按键从 ActivityTwo 回到 ActivityOne 的时候,并不想重新初始化
|
9
whenwind 2020-11-04 09:41:28 +08:00 1
Activity 最好不要作为流程的控制和记录来使用,因为你永远不知道系统会在什么时候给你杀掉。
如果有需要用到类似跳过 ActivityOne 直达 ActivityTwo 的话我会用 Service,Activity 的行为以 Service 上储存的数据为准,ActivityOne 在询问 Service 已经初始化过了就不执行初始化代码直接进入 ActivityTwo,休眠回来 ActivityTwo 按下返回键询问 Service,如果已经执行过初始化就不执行返回。 如果不希望使用 Service 的话那把部分初始化代码放在 ActivityTwo 的 onCreate 呢? |
10
demo06 2020-11-04 10:30:39 +08:00
你在 1 里面跳转 代码后面加个 finish(),貌似 2 就不会再返回 1 了
|