Android服务,用于每隔x分钟上传x分钟的数据

时间:2014-07-13 13:36:23

标签: android loops service

我有2个服务在后台运行。一个将不断收集位置数据,另一个将数据发送到服务器,每隔10分钟由AlarmManager启动。

在向服务器发送数据的服务中,我有一个方法将在onStartCommand()中发布数据(来自数据库的50行)。我想让服务连续执行post数据方法最多5分钟。

我曾尝试使用while循环连续执行该方法,但它会显示应用程序没有响应的消息。我认为while循环在主线程中不停地执行服务中的方法导致活动崩溃。

有没有更好的方法在服务中连续执行方法而在主线程上崩溃?

2 个答案:

答案 0 :(得分:1)

  

我有2个服务在后台运行。一个将不断收集位置数据,另一个将数据发送到服务器,每隔10分钟由AlarmManager启动。

这对电池寿命来说太糟糕了,因为您需要通过WakeLock来持续开启CPU以持续收集位置数据"

  

在向服务器发送数据的服务中,我有一个方法可以在onStartCommand()中发布数据(来自数据库的50行)。我想让服务连续执行post数据方法最多5分钟。

电池续航时间会更糟,因为现在您可以将WiFi或移动无线电设备连续保持高达5分钟。

  

有没有更好的方法在服务中连续执行方法而在主线程上崩溃?

分叉后台线程。

答案 1 :(得分:1)

你需要在另一个线程上完成你的工作。

该服务有助于控制UI之外的生命周期,但它仍然在MainThread上。

它被称为"后台服务"因为它的后台生命周期与您的Activity生命周期不同。

最简单的示例是从您的背景ASyncTask生成Service或更好地使用IntentServiceIntentService将自动控制您对线程的使用。

以下是Intent Service线程工作的官方文档:

http://developer.android.com/training/run-background-service/send-request.html

以下是我讨论过的API文档 http://developer.android.com/reference/android/os/AsyncTask.html http://developer.android.com/reference/android/app/IntentService.html