【问题标题】:Broadcast receiver vs activity with alarmmanager广播接收器与警报管理器的活动
【发布时间】:2014-08-08 21:21:13
【问题描述】:

我正在使用带有 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. 直接启动 Activity,并在设置内容视图之前计算天气以继续此 Activity 或终止

【问题讨论】:

    标签: android android-activity broadcastreceiver alarmmanager wakelock


    【解决方案1】:

    我正在使用带有 AlarmManager 的广播接收器,但有时需要很长时间才能唤醒,这会导致应用功能出现问题

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

    并在启动活动后发布

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

    WakeLock 有用的唯一方法是,如果您从活动的onCreate() 中释放它,以尝试使设备保持足够长的时间以使活动启动。

    你能说出什么是最好的方法吗?

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

    关于“很多秒”,请记住,您的 AlarmManager 事件可能不准确,这取决于您设置它们的方法、您的 targetSdkVersion 是什么以及您的 Android 版本正在运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多