【问题标题】:ANDROID : Activity gets destroy in sleep modeANDROID:活动在睡眠模式下被破坏
【发布时间】:2012-07-27 12:48:24
【问题描述】:
我在从广播接收器调用的 Activity 中遇到问题。
我的应用程序包含警报系统,因此当警报时间匹配时,广播接收器会调用一个活动以到达前面。这个活动不是全屏的,它是一种使用 RegionSearchDialog 作为主题的警报框。 (不要混淆,我只使用activity,我的类扩展了activity,但是xml中的主题设置为RegionSearchDialog)
我的开发平台是:4.0.4
现在我的问题是:如果我的设备处于开启状态(解锁 keygurad),无论应用程序在前面还是在后面,都可以正常工作。但是如果电源关闭(睡眠模式/设备被锁定),它将调用相同的活动,onCreate() 先调用然后 onResume(),然后它会调用 onPause(),因为我的设备处于睡眠模式。
我想保持该活动运行,不想让它进入睡眠状态。
因此,当闹钟时间匹配时,它会发出蜂鸣声,如果它处于睡眠模式,则用户可以解锁设备并查看该闹钟的弹出窗口。
在此先感谢您帮助我。
【问题讨论】:
标签:
android
android-activity
broadcastreceiver
【解决方案1】:
这就是 Android 中的活动应该工作的方式。您最好使用 Service 或使用 Alarm manager 在特定时间启动 Activity,因为这些更适合您尝试做的事情 =)。
【解决方案2】:
这是我的代码,我认为它可以帮助你:
在您的 create() 活动中:
super.onCreate(savedInstanceState);
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
setContentView(R.layout.main);
主要的xml是:
<activity
android:name=".main"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Wallpaper.NoTitleBar"
android:launchMode="singleInstance"
android:excludeFromRecents="true"
android:taskAffinity=""
android:configChanges="orientation|keyboardHidden|keyboard|navigation" />
请在您的项目中测试这些代码。 :)
【解决方案3】:
除了'enjoy-writing'的回应:
- 在我的 android 应用程序中设置标志就足够了,如 onCreate 代码中所述。
- 效果是应用程序在进入睡眠模式时会暂停(例如通过按下手机上的开/关按钮),并在从睡眠模式返回时恢复。
- 通过删除 FLAG_KEEP_SCREEN_ON 标志,如果有一段时间不使用视图,您仍然可以让手机进入睡眠状态。