当前位置: 首页 > 知识库问答 >
问题:

在android中,哪个是更好的ScheduledExecutorService或AlarmManager?

胡鸿远
2023-03-14

我是一个初学者,我正在开发一个Android应用程序,它会在一定的延迟(以天为单位)后继续向用户发送短信。我希望用户一旦注册就应该收到短信,不管他是否登录。短信内容和手机号码是从database.So获取的,经过研究,我发现了两种方法。

>

  • 预定执行人服务

    报警管理器

    问题是,当手机关闭或重新启动时,警报管理器将关闭。预定的礼宾服务也是如此吗?使用执行器服务时,我应该在线程池中使用多少个线程?

  • 共有1个答案

    危烨煜
    2023-03-14

    报警管理器

    只要报警接收器的onReceive()方法正在执行,报警管理器就会保持CPU唤醒锁定。这保证了在您完成广播处理之前,手机不会Hibernate。一旦onReceive()返回,报警管理器将释放此唤醒锁。这意味着,在某些情况下,一旦您的onReceive()方法完成,手机将立即Hibernate。如果您的报警接收器调用了<code>Context。startService(),手机可能会在启动请求的服务之前Hibernate。为了防止这种情况,您的BroadcastReceiver和服务将需要实施单独的唤醒锁定策略,以确保电话继续运行,直到服务可用为止。

    ScheduledThreadPoolExecutor。

    您可以使用< code>java.util.Timer或ScheduledThreadPoolExecutor (首选)来计划在后台线程上定期发生的操作。

    下面是使用后者的一个示例:

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

    所以我更喜欢SchduledExecutorService。

    但是如果更新发生在你的应用程序运行的时候,你可以使用一个定时器,就像在其他回答中建议的那样,或者使用更新的ScheduledThreadPoolExecutor。如果您的应用程序即使不运行也会更新,那么您应该使用AlarmManager。

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

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

    也看看这篇文章。

     类似资料:
    • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

    • 当开发一个需要我唯一识别手机用户的应用程序时。我希望得到一些关于使用手机UDID还是IMEI的建议。使用这两种方法有什么优点/缺点吗。如有任何意见,将不胜感激

    • 问题内容: 我正在研究/比较CXF和Spring-WS的Web服务吗?我需要同时充当WS的提供者和使用者。简而言之,有人告诉我Spring- WS更具可配置性,但是CXF易于启动和运行。这个问题是主观的,但将有助于指导我的研究。 您对这两个框架有什么经验? 您对这两个框架有任何陷阱吗? 您是否发现任何一个提供的有用功能可能是另一个没有提供的功能? 问题答案: 我认为最大的区别是Spring-WS

    • 本文向大家介绍C#中哪个更好的System.String或System.Text.StringBuilder类?,包括了C#中哪个更好的System.String或System.Text.StringBuilder类?的使用技巧和注意事项,需要的朋友参考一下 主要区别是StringBuilder是Mutable,而String是Immutable。 字符串是不可变的,不可变是指如果您创建字符串对象

    • 问题内容: 我研究了Linux内核,发现对于x86_64体系结构,中断不适用于调用系统调用1。 对于i386体系结构(32位x86用户空间),更可取的是:或者为什么? 我使用Linux内核版本3.4。 脚注1:在某些情况下确实可以在64位代码中工作,但是从不建议这样做。 问题答案: 是在上进入内核模式的默认方法。该指令 在Intel处理器的 32位操作模式下不可用。 是最常用于以32位操作模式调用

    • 问题内容: 在其中总是最好使用Locator定位元素。 最小定位器是(如果我输入错误,请纠正我)。 那么,人们 在进行定位器 识别时,是否有任何优先顺序或顺序? 问题答案: 我只是从写一些点,这其中已经被GK27在给予参考,这里写的目的是要清楚,如果页面没有找到一段时间后,用户可以从这里查看。 因此,定位元素的更好方法是优先级明智,应该在列表中, 此处列表中的第一个值包含优先级,依此类推。 通过I