gpt4 book ai didi

android - Android 中的 ScheduledExecutorService 和 AlarmManager 哪个更好?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:25 27 4
gpt4 key购买 nike

我是初学者,我正在开发一个 android 应用程序,它将在一定的延迟(几天)后继续向用户发送短信。我希望用户一旦注册就应该收到短信,而不管他是否登录。短信内容和手机号码是从数据库中获取的,所以研究后发现了两种方法

  1. 调度执行器服务

  2. 报警管理器

问题是alarmManager会在手机关机或重启时关闭。 ScheduledExecutorService 也是这种情况吗?在使用 Executor Service 时,我应该在 ThreadPool 中使用多少个线程?

最佳答案

警报管理器

只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有 CPU 唤醒锁。这保证了在您处理完广播之前手机不会休眠。一旦 onReceive() 返回,Alarm Manager 就会释放这个唤醒锁。这意味着手机在某些情况下会在 onReceive() 方法完成后立即休眠。如果您的闹钟接收器调用了 Context.startService(),则手机可能会在请求的服务启动之前进入休眠状态。为防止这种情况,您的 BroadcastReceiver 和服务将需要实现单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。

调度线程池执行器。

您可以使用 java.util.Timer 或 ScheduledThreadPoolExecutor(首选)安排在后台线程上定期发生的操作。

这是使用后者的示例:

ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate
(new Runnable() {
public void run() {
// call service
}
}, 0, 10, TimeUnit.MINUTES);

所以我更喜欢ScheduledExecutorService

但是如果更新将在您的应用程序运行时发生,您可以使用定时器,如其他答案中所建议的,或更新的 ScheduledThreadPoolExecutor。如果您的应用程序即使在未运行时也会更新,您应该使用 AlarmManager。

警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行。

请注意,如果您计划在关闭应用程序时进行更新,则每十分钟一次的频率非常高,因此可能有点太耗电了。

另请查看 this发布。

关于android - Android 中的 ScheduledExecutorService 和 AlarmManager 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23774720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com