Android应用程序如何在未启动的情况下获得通知?

Android应用程序如何在未启动的情况下获得通知?,android,Android,以大型博客的应用程序为例(其工作原理与RSS提要非常相似,但适用于您的手机)。每当博客发布一篇新文章时,应用程序都会在用户手机上创建一个关于新文章的通知 以下是一些我想了解的事情: 通知是由我手机上的应用程序拉取的还是由博客推送的 为什么即使我还没有启动应用程序,它也能工作 Android平台的哪些类和服务用于创建此类应用程序 非常感谢。您可以通过以下方式轻松完成类似操作: 您的应用程序是否使用AlarmManager设置了警报 让报警接收器启动检查更新的服务 使用NotificationMan

以大型博客的应用程序为例(其工作原理与RSS提要非常相似,但适用于您的手机)。每当博客发布一篇新文章时,应用程序都会在用户手机上创建一个关于新文章的通知

以下是一些我想了解的事情:

  • 通知是由我手机上的应用程序拉取的还是由博客推送的
  • 为什么即使我还没有启动应用程序,它也能工作
  • Android平台的哪些类和服务用于创建此类应用程序

  • 非常感谢。

    您可以通过以下方式轻松完成类似操作:

  • 您的应用程序是否使用AlarmManager设置了警报
  • 让报警接收器启动检查更新的服务
  • 使用NotificationManager向用户显示通知
  • 这是一个轮询解决方案,在您描述的大多数情况下,它应该很好,可能更好

    但是,如果您想要推送解决方案,可以研究Android C2DM,它允许您的服务器向注册的Android设备发送推送通知

    编辑

    应用程序如何“不启动”运行

    有几种方法。一是任何应用都可以注册不同的设备事件;其中之一是引导完成事件


    第二种方法是使用AlarmManager。如果某个应用程序设置了报警,那么用户将导航离开该应用程序,然后操作系统决定关闭该应用程序,该报警仍可注册为在特定时间运行。当触发此警报时,应用程序开发人员将运行任何喜欢的代码,包括启动服务。当然,在不通知用户的情况下执行此操作可能是一个问题,尤其是当服务耗尽电池等时。

    当然,有很多方法可以做到这一点,但在一般情况下,我可以想象:

  • 它是由电话拉的
  • 即使你看不到应用程序,它也可以在后台运行服务
  • 这真的取决于应用程序的功能,您想了解哪些具体方面
  • 单向:
  • 启动后,应用程序可以通过
    广播
    启动
    Sercvice
    。请看这里:
  • 应用程序在启动时启动一个
    服务
    ,一个服务就像一个活动,除了没有UI和在后台运行之外
  • 服务
    会不时查找新帖子,例如在
    ScheduledThreadPoolExecutor中作为
    可运行
    实现
  • Runnable
    查找新帖子并发出通知
  • 注: 这也是一种民意测验解决方案。 您可以使用总是调用自身的
    处理程序
    ,或者只是一个不时休眠和唤醒的线程,而不是
    ScheduledThreadPoolExecutor
    。我认为ScheduledThreadPoolExecutor是一种“好”的方式

    通知是由我手机上的应用程序拉取的还是由博客推送的

    两者都有可能

    为什么即使我还没有启动应用程序,它也能工作

    好吧,在安卓3.1+上,你需要至少运行一次应用程序才能让这些东西正常工作


    除此之外,他们还使用类似于
    AlarmManager
    (用于pull)或C2DM(用于push)的工具,这两种工具都不需要你“启动应用程序”,就像你需要打开Gmail活动才能获得新的电子邮件一样。

    我仍然不明白第二点。如果我还没有启动该应用程序,该应用程序如何设置检查更新的服务?也就是说,我打开手机,即使不启动应用程序,我也会收到这些通知。或者其他人而不是我的应用程序将设置该服务?该应用程序可以注册不同的事件,如手机启动等。此外,如果某个应用程序设置了闹钟,则当闹钟响起时,该应用程序可以完全关闭,并且操作系统将启动闹钟中指定的应用程序的任何部分。关于2,一旦我打开手机,谁将启动该服务,因为即使不启动应用程序,我仍然会收到通知。谢谢。大多数情况下,你会希望你的应用程序收到启动服务的操作启动完成广播信号。谢谢,我不知道自动启动的事情。有道理。我不认为有什么像注册AutoStart。。。选中此项可自动启动您的服务:好吧,据我所知,facebook应用程序确实会在启动时启动,但我真的不知道^^^是否有明确的设备启动注册(不称为AutoStart,但足够近)好吧,帖子描述了我的观点1;)我不知道如何实现这个。。。所以它显然不是“注册”(编辑:编辑)