相关疑难解决方法(0)

防止在关闭屏幕时重新创建Android活动

如何防止在关闭屏幕时重新创建活动?

我所做的

  1. 启动Bejewels并前往珠宝屏幕.
  2. 短按电源按钮.屏幕已关闭,但设备未关闭.
  3. 再次按电源按钮.

我所看到的

与关闭屏幕前相同的屏幕.

对于我的应用程序(简单的一个,只是一个带有单个WebView的Web应用程序),方案如下:

我所做的

  1. 启动我的应用.onCreate()方法活动将URL加载到WebView中.
  2. 短按电源按钮.屏幕已关闭,但设备未关闭.
  3. 再次按电源按钮.

我所看到的

WebView正在重新加载页面.

我的期望

在Bejewels的情况下,我希望看到相同的屏幕,我的应用程序是以前状态的页面:脚本正在运行,表单字段已填充等.

调试显示,我错了(在前一个问题中)并且onDestroy()和onCreate()在屏幕刚刚打开时被逐个调用.由于我仍然听到由脚本播放的音乐,当屏幕关闭时,看起来活动和WebView都存在,直到我再次按下电源按钮.

我尝试了什么.

  1. android:alwaysRetainTaskState ="true"同样的行为.
  2. 阅读意图(无济于事,我只是不明白,它们如何适用于我的情况).
  3. 使用PhoneGap.它的行为有所不同:只需按下电源按钮就可以杀死整个应用程序.这是更好的,但不是最好的.

lifecycle lifetime android-intent activity-lifecycle android-activity

16
推荐指数
2
解决办法
1万
查看次数

为什么在我的Activity启动后立即调用onStop?

我有一个活动需要在启动时打开屏幕(以防屏幕关闭).所以在我看来onCreate,我有:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
            |WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
Run Code Online (Sandbox Code Playgroud)

使用这种直接的组合,我能够在我的后台服务启动时显示我的活动(是的,这是一个合法的案例).

然而,问题是当我在这种情况下启动我的活动时,存在一种非常奇怪的生命周期行为.使用广泛的日志记录,我能够确定在活动开始后立即发生以下7个步骤:

  1. 的onCreate
  2. 在onStart
  3. 的onResume
  4. 在onPause
  5. 的onStop
  6. 在onStart
  7. 的onResume

看到了吗?对于简单的活动开始,onStart被调用两次.更重要的是,onStop被神秘地称为,即使活动刚刚开始 - 没有任何事情会导致它停止.

我已经在许多不同的场景中对此进行了测试,看起来这种奇怪的行为只发生在屏幕关闭且活动在被破坏后启动时.如果屏幕打开,或者活动已停止[但尚未销毁],则活动正常启动,onStart仅调用一次.

结论:似乎当我的活动启动并且强制启动屏幕时,Android会启动活动,然后停止活动,然后再次启动它,原因无关紧要.

那么:为什么会这样呢?我有什么办法可以解决这个问题(所以只有在有正当理由的情况下才会调用onStop)?


笔记:

  • 有问题的活动是使用singleTasklaunchmode
  • 我试过禁用键盘锁/锁,但它没有效果
  • 我在运行Android 3.2的三星Galaxy Tab 10.1上见证了这种行为.我还没有测试这是否适用于其他任何事情......

android android-lifecycle android-activity

11
推荐指数
1
解决办法
4423
查看次数

检测开/关键按Android键

如何检测按下的电源按钮或锁定屏幕按钮?当我的游戏以这种方式暂停时,它会导致游戏崩溃,因为我需要在线程发生时暂停它.

java android keylistener listener

6
推荐指数
2
解决办法
2万
查看次数

电源按钮点击现在调用Android KitKat上的Activity中的onStop,以前只是onPause?

所以我才意识到,当点击电源按钮关闭屏幕时,onStop会在我的Activity中被调用.以前只调用onPause.这是KitKat的变化,并且在任何地方都有关于它的说明(是故意的)吗?这是KitKat的变化还是特定制造商实施的?

编辑:我将很快更新这个更多信息.我认为这种变化比我第一次意识到的更微妙,可能是因为我持有部分唤醒锁或听取GPS更新.无论如何,我所知道的是,在我的代码中,在KitKat之前,单击电源按钮时未调用onStop.也许这也取决于设备.

编辑:新信息.通过以下设置,单击电源按钮时不会调用onStop():Android minSDKVersion = 4,targetSDKVersion = 8,(如果使用Android Studio,则设置compileSdkVersion = 8).在2台设备上验证了这一点(运行KitKat和JellyBean)所以这个问题不是原始中首次提到的KitKat,而是最小的目标sdk设置.Bounty将被授予任何人可以找到更改时的参考,或者至少显示第一个最小/目标sdk设置,该设置更改了从电源按钮单击调用onStop的行为.

android android-activity android-4.4-kitkat

5
推荐指数
1
解决办法
2559
查看次数