0

也许我还不了解一些Android概念,但回答以下问题可能对我有很大帮助:

在我的 Android 应用程序中,我需要在后台每 x 秒从 Web 服务获取数据(应用程序必须似乎没有运行)。

当来自网络服务的数据是我期望的数据时,我确实需要显示一个 Android 通知。

  • 那么如何在具体活动中加载我的应用程序?
  • 如何确保后台“服务”即使崩溃也能继续运行?也就是说,如何重新启动应用程序的后台部分或“服务”?
4

4 回答 4

2
May I use Android Services?

是的。使用IntentService

I need to get data from a web service each x seconds in background 

使用警报管理器

When the data from the web service is the one I am expecting,
I do need to show an Android Notification.

使用广播接收器通知

How can then load my Application in a concrete activity?

使用 Intent 从通知中启动活动

How can I ensure the background "service" will keep running even if it crashes?
This is, how do I restart that background part or "service" of my application?

您需要修复导致崩溃的原因。否则每次服务运行时,都可能导致崩溃。AlarmManager 将定期重新启动您的服务。

于 2013-09-13T08:21:49.107 回答
2

在我的 Android 应用程序中,我需要在后台每 x 秒从 Web 服务获取数据(应用程序必须似乎没有运行)。

我可以使用 Android 服务吗? http://developer.android.com/reference/android/app/Service.html

是的,您可以使用服务,但问题是您想每 x 秒轮询一次 Web 服务吗?这样你会很快耗尽电池。您可以做的是安排一个不精确的重复任务(它会在 15 分钟间隔内被调用,但会与其他应用程序捆绑在一起以降低电池使用量)。请参阅 AlarmManager.setInexactRepeating()。或使用 Google Cloud Messaging (GCM) 推送通知,让您的服务器在有新数据时通知并唤醒您的手机。

当来自网络服务的数据是我期望的数据时,我确实需要显示一个 Android 通知。那么如何在具体活动中加载我的应用程序?

您可以从服务中做到这两点。服务是一个上下文,因此您可以显示通知、启动活动等......

如何确保后台“服务”即使崩溃也能继续运行?也就是说,如何重新启动应用程序的后台部分或“服务”?

您可以在 AlarmManager 中安排重复的服务启动 Intent。如果您的服务正在运行,它应该被忽略,如果没有 - 它会启动您的服务。

为确保您的服务不会轻易被系统杀死(例如,当内存不足时),请使用 Service.startForeground() 并确保从 Service.onStartCommand() 返回 START_STICKY。

于 2013-09-13T08:23:26.010 回答
1

*强调文字*请找到以下答案。

当来自网络服务的数据是我期望的数据时,我确实需要显示一个 Android 通知。

当您的服务从 web 服务中找到所需的数据时,显示通知

  • 那么如何在具体活动中加载我的应用程序?

    用户单击通知以启动活动

  • 如何确保后台“服务”即使崩溃也能继续运行?也就是说,如何重新启动应用程序的后台部分或“服务”?

设置定期警报以启动和停止服务,这样您就不会耗尽电池。

于 2013-09-13T08:18:52.903 回答
1
  • 是的,你是对的.. 使用服务。在获取数据时,使服务启动应用程序的活动。

  • 关于服务崩溃的问题。编写另一个全局服务来检查数据获取服务是否正在运行。它发现服务已经停止的那一刻。使监控服务重新启动数据获取服务。

于 2013-09-13T08:23:06.407 回答