我有2个服务在后台运行。一个将不断收集位置数据,另一个将数据发送到服务器,每隔10分钟由AlarmManager启动。
在向服务器发送数据的服务中,我有一个方法将在onStartCommand()
中发布数据(来自数据库的50行)。我想让服务连续执行post数据方法最多5分钟。
我曾尝试使用while循环连续执行该方法,但它会显示应用程序没有响应的消息。我认为while循环在主线程中不停地执行服务中的方法导致活动崩溃。
有没有更好的方法在服务中连续执行方法而在主线程上崩溃?
答案 0 :(得分:1)
我有2个服务在后台运行。一个将不断收集位置数据,另一个将数据发送到服务器,每隔10分钟由AlarmManager启动。
这对电池寿命来说太糟糕了,因为您需要通过WakeLock
来持续开启CPU以持续收集位置数据"
在向服务器发送数据的服务中,我有一个方法可以在onStartCommand()中发布数据(来自数据库的50行)。我想让服务连续执行post数据方法最多5分钟。
电池续航时间会更糟,因为现在您可以将WiFi或移动无线电设备连续保持高达5分钟。
有没有更好的方法在服务中连续执行方法而在主线程上崩溃?
分叉后台线程。
答案 1 :(得分:1)
你需要在另一个线程上完成你的工作。
该服务有助于控制UI之外的生命周期,但它仍然在MainThread上。
它被称为"后台服务"因为它的后台生命周期与您的Activity生命周期不同。
最简单的示例是从您的背景ASyncTask
生成Service
或更好地使用IntentService
。 IntentService
将自动控制您对线程的使用。
以下是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