我正在尝试将后台gps位置监听器作为一项服务,可供我的应用中的所有活动使用。它也应该扫描位置,直到我“杀死”它。但是我意识到,几个小时之后gps服务就会被杀死,我不能再找到位置了。
如何将此服务保持活动状态(至少是locationManager和位置监听器),直到我想要它为止?
由于
public class GPS extends IntentService {
public static LocationListener loc_listener = null;
public static LocationManager locationManager = null;
public GPS() {
super("GPS");
}
@Override
protected void onHandleIntent(Intent intent) {
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (loc_listener == null) {
loc_listener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
};
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0, loc_listener);
}
public static void killGPS() {
if (locationManager != null && loc_listener != null) {
locationManager.removeUpdates(loc_listener);
}
}
}
答案 0 :(得分:2)
但是我意识到,几个小时之后gps服务就会被杀死,我不能再找到位置了。
首先,一直保持GPS开机是一个非常糟糕的主意,因为用户的电池寿命会受到很大影响。您的应用程序需要提供巨大的价值(例如Google导航)以保证此电力成本。
其次,永远不要从IntentService
注册听众。一旦onHandleIntent()
结束,服务就会关闭......但是您泄漏了已注册的侦听器。这有效地保持了后台线程。但是,由于您没有活动组件,Android最终将终止您的流程。