Android 如何保持后台gps服务的有效性

Android 如何保持后台gps服务的有效性,android,background,gps,Android,Background,Gps,我正在尝试将背景gps位置侦听器作为一项服务,可供我应用程序中的所有活动使用。它还应该扫描位置,直到我“杀死”它。然而,我意识到,几个小时后,gps服务停止了,我再也找不到位置了 如何保持此服务(至少是locationManager和LocationListener)的活动状态,直到我想要关闭它 谢谢 public class GPS extends IntentService { public static LocationListener loc_listener = null;

我正在尝试将背景gps位置侦听器作为一项服务,可供我应用程序中的所有活动使用。它还应该扫描位置,直到我“杀死”它。然而,我意识到,几个小时后,gps服务停止了,我再也找不到位置了

如何保持此服务(至少是locationManager和LocationListener)的活动状态,直到我想要关闭它

谢谢

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);
        }
    }

}
然而,我意识到,几个小时后,gps服务停止了,我再也找不到位置了

首先,让GPS一直处于通电状态是一个非常糟糕的主意,因为用户的电池寿命将受到极大影响。您的应用程序需要提供巨大的价值(例如,谷歌导航)来保证这一电力成本


其次,永远不要从
IntentService
注册侦听器。一旦
onHandleIntent()
结束,服务将关闭。。。但是你泄露了你的注册听众。这有效地保持了后台线程的运行。但是,由于您没有活动组件,Android最终将终止您的进程。

这是为了测试,稍后我将对其进行定制,以提高电池效率。如果从IntentService注册侦听器不好,我应该从活动中打开侦听器吗?如果是这样的话,我该如何设置它,以便在录制一个位置并将其关闭之前,我可以将其保持几分钟?肖恩:在这种情况下,请使用常规的
服务。在
onStartCommand()
中注册侦听器。当修复程序到达或出现超时情况时,取消注册侦听器并调用
stopSelf()
。您可以在我的
LocationPoller
组件()中看到这样一个例子,尽管它是为不一定是活动的情况而设计的。您好,我试图实现您的示例,但我似乎永远无法获得locationReceiver类。在日志中我看到一个FileNotFoundException错误(权限被拒绝),也许这就是我没有收到任何信息的原因?无论如何,如果你对发生的事情有任何想法,我将非常感谢你的帮助。谢谢