Java Android GPS回调脱离UI线程
我无法将GPS的Onlocation更改为在不同的线程上运行。我知道在调用函数时如何管理UI线程,但使用GPS时,我不会主动调用函数 我的目的是每次GPS接收到读数时都有一个闪光。我已将此函数置于可运行状态。我将此函数传递给实现LocationListener的类。然后在main类中,我启动了一个调用requestLocationUpdates的新线程。我希望LocationListener的onLocationChanged可以在不同的线程中运行,发布到回调,并在UI线程中产生必要的UI效果。不幸的是,程序每次尝试调用RequestLocationUpdate时都会崩溃。正确的做法是什么 现在看起来像这样 主要类别:Java Android GPS回调脱离UI线程,java,android,multithreading,user-interface,gps,Java,Android,Multithreading,User Interface,Gps,我无法将GPS的Onlocation更改为在不同的线程上运行。我知道在调用函数时如何管理UI线程,但使用GPS时,我不会主动调用函数 我的目的是每次GPS接收到读数时都有一个闪光。我已将此函数置于可运行状态。我将此函数传递给实现LocationListener的类。然后在main类中,我启动了一个调用requestLocationUpdates的新线程。我希望LocationListener的onLocationChanged可以在不同的线程中运行,发布到回调,并在UI线程中产生必要的UI效果。
final Runnable changeLight = new Runnable(){
public void run(){
// do stuff
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.capture);
status = (ImageView) findViewById(R.id.status);
database = new DatabaseManager(this);
new Thread(){
public void run(){
location = (LocationManager) getSystemService(LOCATION_SERVICE);
listener = new GPSManager(database, changeLight, light, status);
location.requestLocationUpdates("gps", 10000L, 0, listener);
}
}.start();
}
LocationListener类:
public void onLocationChanged(Location location) {
if (location.getAccuracy() <= 32.0){
light = lightColors.Green;
status.post(callback);
database.insertData(location);
}
else{
light = lightColors.Yellow;
status.post(callback);
}
}
public void onLocation已更改(位置){
如果(location.getAccuracy()您的问题可能是由于主线程的不正确同步引起的吗?在应用程序崩溃之前您是否遇到任何异常?您是否可以发布一个符合sscce.org的示例
通常,在GUI上处理异步事件时,应该进行适当的同步:调用location.RequestLocationUpdate的线程必须有一个循环器(请参阅)。
您可以使用HandlerThread而不是Thread。我遇到了相同的问题。解决方案是,您希望从位置管理器接收位置更新的新线程必须是一个活套线程。为此,您只需在线程的run()函数中添加以下行
Looper.prepare()
loop.loop()