我正在使用带有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
我正在考虑改变它。
你能告诉我什么是最好的方法吗?
使用广播接收器执行一些计算,然后开始活动(到目前为止在我的情况下唤醒锁问题)。
直接启动活动,并在设置内容视图前计算是继续此活动还是终止
我使用广播接收器与AlarmManager,但有时它需要很多秒唤醒,这导致在应用程序的功能问题
我不知道任何其他类型的组件会以某种方式启动比BroadcastReceiver
更快。当然,我希望活动的启动速度比BroadcastReceiver
慢。
并在启动活动
后释放
WakeLock
对您没有好处,因为在您的onReceive()
呼叫期间已经有一个WakeLock
到位(假设这是一个清单注册的BroadcastReceiver
)。
这个WakeLock
有用的唯一方法是,如果你从活动的onCreate()
中释放它,试图保持设备清醒足够长的时间来启动活动。
你能告诉我什么是最好的方法吗?
这取决于"计算"是什么。onReceive()
在主应用程序线程上被调用。与主应用程序线程上调用的所有方法一样,您希望onReceive()
在几毫秒内返回。如果你的"计算"肯定只需要几毫秒,那就坚持使用BroadcastReceiver
。如果"计算"将花费比这更长的时间,您将考虑将该工作委托给IntentService
,并在需要时让IntentService
启动该活动。
关于"很多秒",记住你的AlarmManager
事件可能是不精确的,这取决于你使用什么方法来设置它们,你的targetSdkVersion
是什么,以及你运行的Android版本。