0

设备用于进入“睡眠”模式,这会导致再次启动我的活动的 onCreate() 方法,这是不希望的。

例如,我有一个 VideoView 活动,它在 onCreate 方法中被初始化,所以当设备“休眠”时,它会重新创建我的播放器并启动播放器。

如何克服这一点?和系统广播有关系吗?

4

2 回答 2

1

onPause()最终,一旦被调用,您永远无法阻止系统杀死您的应用程序。您必须始终编写您的应用程序,以便它可以重新启动。在实践中,这意味着 a) 实施onRetainNonConfigurationInstance()以捕获应用程序的非常短期的破坏和重新创建,b) 覆盖onSaveInstanceState(Bundle)以捕获中期破坏/重新创建,以及 c) 覆盖onPause()以处理长期破坏/重新创建创建。

在大多数情况下,它是您真正需要实现onSaveInstanceState()的唯一一个,但可以是真正的优化。onRetainNonConfigurationInstance()

在您的特定情况下,您onSaveInstanceState()会将视频文件的 URI 和上次播放的时间戳写入 Bundle,以便在重新创建应用程序时返回到视频中最后播放的位置。

至于唤醒锁,这些是可以接受的,例如防止您的设备在观看视频的过程中进入睡眠状态。它们不能让你的应用程序不被杀死,这样你就不必经历第二次通过 onCreate() 的麻烦。首先,它会耗尽电池,其次,无论如何也不能保证。

最后一点:如果你不这样做,你应该确保你的视频播放活动设置了“singleTop”属性,这样你就不会在活动堆栈中获得多个实例。

于 2012-12-14T02:33:01.020 回答
0

您可以使用 AlarmManager 来触发小部件的刷新。在安排下一个周期时,您可以定义是否唤醒您的设备(也就是执行实际任务)。

    alarmManager.set(wakeUpType, triggerAtTime, pendingIntent);
于 2012-06-18T09:09:45.327 回答