【发布时间】:2016-02-05 18:02:46
【问题描述】:
我的服务具有可变的生命周期。它可能会执行 5 分钟到 2 小时(例如)。所以我正在寻找最好的方法来做到这一点,我的服务必须实现以下功能:
- 每 5 秒发送(到我的服务器)经纬度和一些额外信息(
string's、boolean's 和int's)
我已经尝试过“正常”服务并尝试做这样的事情来实现这一点:
public class MyFiveSecondsService extends Service {
private Handler handler;
Runnable r = new Runnable() {
@Override
public void run() {
//here send my new data
}
};
public void onCreate(){
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(handler == null){
handler = new Handler();
}
handler.post(r);
return super.onStartCommand(intent, flags, startId);
}
}
实际上该代码可以工作,但是我在使用这种方法时遇到了一些性能问题,所以我尝试做这样的事情:
public class SendUniquePositionIntentService extends IntentService {
public SendUniquePositionIntentService() {
super("co.bomboapp.Service.IntentService.SendUniquePositionIntentService");
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
protected void onHandleIntent(Intent intent) {
//do the logic here
}
}
public class MyFiveSecondsService extends Service {
private Handler handler;
Runnable r = new Runnable() {
@Override
public void run() {
//call my SendUniquePositionIntentService here
}
};
public void onCreate(){
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(handler == null){
handler = new Handler();
}
handler.post(r);
return super.onStartCommand(intent, flags, startId);
}
}
这种方法没有奏效,当我关闭应用程序时,任何服务都继续运行。所以在开始任何其他尝试来实现这一点之前,我想要一些方向,做这个“无限循环服务”并保持性能的最佳方法是什么?
我使用Android 4.1 作为最低API,并以5.0 API 为目标。
我的测试设备是运行Android 6 的Nexus 5。
现在我使用parse.com 作为数据库。
【问题讨论】:
-
服务被设计为在您的活动被破坏后仍然运行。所以别忘了在服务完成后停止服务
-
它会在适当的时候自行停止,但无论如何,谢谢!
-
为什么不直接调用 SendUniquePositionIntentService?我认为使用 SendUniquePositionIntentService 来实现您的需求就足够了。
标签: android android-service background-service android-intentservice