gpt4 book ai didi

Android 服务对位置更改执行操作

转载 作者:行者123 更新时间:2023-11-30 04:23:57 26 4
gpt4 key购买 nike

我正在尝试创建一项服务,每隔几分钟检查一次用户的位置,并在位置更改时执行某些代码。

这是我的服务的 onCreate 代码。

public void onCreate() {
super.onCreate();
Log.i(TAG, "Service creating");

//timer = new Timer("TweetCollectorTimer");
//timer.schedule(updateTask, 1000L, 60 * 1000L);
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 10, locationListener);
}

当我的位置改变时,它能够做一些事情。但是我在我的 logcat 中收到以下警告“正在向死线程上的处理程序发送消息”

我想知道问题出在哪里,是否有更好的方法来实现我想做的事情?

最佳答案

您必须警惕您的位置监听器和您的 Activity 生命周期。

如果您在 Activity 的 onCreate() 方法中请求位置更新,请务必稍后取消注册,例如 onDestroy(),尽管在​​我的意见最好注册它 onStart() 并注销它 onStop()

您的位置监听器似乎正在调用可能已经停止的 Activity 的方法。

如果您计划在多个 Activity 中实现位置检测,明智的做法是创建一个基类,其中包含一个在位置更新时调用抽象方法的监听器。您可以通过覆盖 onStart() 来注册您的监听器和覆盖 onStop() 来取消注册您的监听器来进一步插入它。不过,不要忘记在该抽象类和子类中调用 super 构造函数。

希望对您有所帮助,不要太困惑!

编辑:

代码示例如下:

public abstract class LocationActivity extends Activity {

private LocationListener mLocationListener;

@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
updateLocation(location);
}

@Override
public void onStatusChanged(final String provider,
final int status, final Bundle extras) {
}

@Override
public void onProviderEnabled(final String provider) {
}

@Override
public void onProviderDisabled(final String provider) {
}
};
}

@Override
protected void onStart() {
super.onStart();

// register your listener with the location manager
}

@Override
protected void onStop() {
super.onStop();

// unregister your listener from the location manager
}

protected abstract void updateLocation(Location location);
}

关于Android 服务对位置更改执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838040/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com