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

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

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

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

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

我该怎么办呢?

相关文章

9 thoughts on “请教一个 android 生命周期的问题

  1. 查了下资料,是不是我在 onCreate()里面检查 savedInstanceState != null 就可以判断这个 ActivityOne 是被系统销毁后重新造的。

  2. 什么手机,有的手机启动程序的时候只启动你的程序,然后你的程序根据你的 manifest 启动你的 LAUNCHER Activity,有的手机会找到你的程序的 LAUNCHER Activity,然后启动你的 activity,这两个从现象上没什么区别。这个是我满满摸索发现的。

  3. @MaL
    @kiroter

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

    我查到的办法是用 savedInstanceState != null 是否被系统销毁,然后在 onCreate()里面判断是否重新初始化。finish()按照开发文档说法是不需要 ActivityOne,需要将其关闭的时候调用。

  4. @hikari2 谢谢指导,手机是 pixel 3a,我的问题不在于启动程序,而是迷惑于程序在后台被唤醒后(还被杀了 Activity)的行为。

  5. @devfeng 那段初始化代码会自动跳到 ActivityTwo 。当我用 back 按键从 ActivityTwo 回到 ActivityOne 的时候,并不想重新初始化

  6. Activity 最好不要作为流程的控制和记录来使用,因为你永远不知道系统会在什么时候给你杀掉。
    如果有需要用到类似跳过 ActivityOne 直达 ActivityTwo 的话我会用 Service,Activity 的行为以 Service 上储存的数据为准,ActivityOne 在询问 Service 已经初始化过了就不执行初始化代码直接进入 ActivityTwo,休眠回来 ActivityTwo 按下返回键询问 Service,如果已经执行过初始化就不执行返回。
    如果不希望使用 Service 的话那把部分初始化代码放在 ActivityTwo 的 onCreate 呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注