广播接收器vs带有警报管理器的活动



我正在使用带有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

我正在考虑改变它。

你能告诉我什么是最好的方法吗?

  1. 使用广播接收器执行一些计算,然后开始活动(到目前为止在我的情况下唤醒锁问题)。

  2. 直接启动活动,并在设置内容视图前计算是继续此活动还是终止

我使用广播接收器与AlarmManager,但有时它需要很多秒唤醒,这导致在应用程序的功能问题

我不知道任何其他类型的组件会以某种方式启动比BroadcastReceiver更快。当然,我希望活动的启动速度比BroadcastReceiver慢。

并在启动活动

后释放

WakeLock对您没有好处,因为在您的onReceive()呼叫期间已经有一个WakeLock到位(假设这是一个清单注册的BroadcastReceiver)。

这个WakeLock有用的唯一方法是,如果你从活动的onCreate()中释放它,试图保持设备清醒足够长的时间来启动活动。

你能告诉我什么是最好的方法吗?

这取决于"计算"是什么。onReceive()在主应用程序线程上被调用。与主应用程序线程上调用的所有方法一样,您希望onReceive()在几毫秒内返回。如果你的"计算"肯定只需要几毫秒,那就坚持使用BroadcastReceiver。如果"计算"将花费比这更长的时间,您将考虑将该工作委托给IntentService,并在需要时让IntentService启动该活动。

关于"很多秒",记住你的AlarmManager事件可能是不精确的,这取决于你使用什么方法来设置它们,你的targetSdkVersion是什么,以及你运行的Android版本。

最新更新