【发布时间】:2015-03-10 08:52:50
【问题描述】:
我正在尝试实现一个一旦启动就永远继续的服务(单元操作系统由于缺乏资源而强行关闭它)。该服务每五分钟获取一次用户的位置。在我的实现中,如果应用程序被发送到后台,服务就会工作但在应用程序终止时停止。
您能否建议如何获得定期更新(例如 5 分钟后获取位置)
GeoFenceService.java
public class GeoFenceService extends Service {
private Context mContext;
private List<TestMalls> mTestMalls ;
private MyLocationManager mLocationManager;
private HashMap<Integer, Double> mallDistances;
private ServiceHandler mServiceHandler;
private Looper mServiceLooper;
@Override
public void onCreate(){
super.onCreate();
mContext = getBaseContext();
this.mLocationManager = MyLocationManager.getInstance();
HandlerThread thread = new HandlerThread("ServiceStartArguments", android.os.Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startid){
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startid;
mServiceHandler.sendMessage(msg);
return START_STICKY;
}
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper){
super(looper);
}
@Override
public void handleMessage(Message msg) {
Toast.makeText(mContext, "Service running ... ", Toast.LENGTH_SHORT).show();
mLocationManager.startListenLocation(mContext);
while (mLocationManager.hasLocation()) {
for (TestMalls t : mTestMalls) {
mallDistances.put(t.mallId, (double) mLocationManager.distanceInMetersFromLocation(t.latitude, t.longitude));
}
Iterator bt = mallDistances.entrySet().iterator();
while (bt.hasNext()) {
Map.Entry<Integer, Double> pair = (Map.Entry<Integer, Double>) bt.next();
Log.v("Hash Map Distances", "Id: " + String.valueOf(pair.getKey()) + " Distance " + String.valueOf(pair.getValue()));
bt.remove();
}
}
}
}
@Override
public void onDestroy() {
Log.v("Service", "done - finished");
}
}
【问题讨论】:
-
你看到我的回答了吗?你在哪里接触到这个?
标签: android android-intent android-service android-pendingintent android-alarms