0

我一直在尝试在 android 中使用 NMEANListener 开发位置侦听器。

我有一个有开始按钮的主要活动。单击开始按钮初始化 locationManager 和 NMEAListener。在此之后我收到通知

public void onNmeaReceived(long arg0, String arg1)

但是一段时间后,我的 NMEAListener 被 android 删除了。

我的 Mainactivity.java 类声明了以下实例

private LocationManager locManager  =   null;
private TextView output     =   null;
private NMEAMessageListener nmeaMessageListener     =   null;

我在单击按钮时初始化主活动类中的侦听器

nmeaMessageListener =   new NMEAMessageListener();


locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000,100,nmeaMessageListener);


Location location=locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

请让我知道 Listener 被 android 删除的原因。有没有更好的方法来做到这一点。我想让我的位置监听器长时间运行。我应该使用 intentservice 来启动 NMEANListener。

任何帮助将不胜感激。

4

1 回答 1

0

如果您想在您的应用程序处于后台时侦听位置变化,请将您的位置侦听器放在 Service 中。您的侦听器被删除的事实是因为Android更有可能在您的应用程序处于后台时杀死它。如果您真的希望您的服务能够在低内存条件下生存,那么将通知添加到 is 并 make if foreground(调用 setForeground)。

IntentService 更适合单个但较长的任务,它为您提供了执行您想要在后台执行的任务的功能,并且在它完成后服务可能会完成。这使得它不适合位置侦听器。

如果位置侦听器是在 Activity 中实现的,那么您可能会在 onStop 中自己将其删除,一旦 Activity 被隐藏,就会调用它。

这是示例 SO:Android 中具有位置侦听器的后台服务

于 2014-04-03T09:02:13.863 回答