我正在使用带有AlarmManager的广播接收器,但有时需要很长时间才能唤醒,这会导致应用功能出现问题
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
and releases after launching activity
我正在考虑改变它。
你能说出最好的方法吗?
使用广播接收器执行一些计算,然后开始活动(在我的情况下到目前为止唤醒锁定问题)。
直接启动活动,并进行计算天气以继续此活动或在设置内容视图之前终止
答案 0 :(得分:0)
我正在使用带有AlarmManager的广播接收器,但有时需要很长时间才能唤醒,这会导致应用功能出现问题
我不知道任何其他类型的组件会以某种方式比BroadcastReceiver
更快地启动。当然,我认为活动的启动速度比BroadcastReceiver
更慢。
并在启动活动后发布
WakeLock
对您没有好处,因为WakeLock
来电期间已经存在onReceive()
(假设这是一个明显注册的{{1} }})。
此BroadcastReceiver
有用的唯一方法是,如果您从活动的WakeLock
释放它,尝试让设备保持足够长的时间以启动活动。
你能说出最好的方法吗?
这取决于"计算"是。在主应用程序线程上调用onCreate()
。与主应用程序线程上调用的所有方法一样,您希望onReceive()
在几毫秒内返回。如果你的计算"肯定只需要几毫秒,坚持使用onReceive()
。如果"计算"需要更长的时间,您需要考虑将该工作委托给BroadcastReceiver
,并让IntentService
在需要时启动该活动。
关于"很多秒",请记住,IntentService
事件可能不准确,具体取决于您使用哪种方法进行设置,{{1}是,以及您正在运行的Android版本。