我在Android应用程序上工作,有几个线程-其中之一是从GPS接收器每秒1次获取数据。我希望其他线程有权从GPS线程的信息。
我已经尝试过使用消息队列来做这件事,但这使得代码变得相当混乱--我创建的所有新线程都必须以自己的方式处理消息,所以我不得不在每个线程类中执行许多新的实现。
我希望能够以这种方式简单地获取数据:
ApplicationState.getLocation();所以我可以使用最新的数据。我如何才能做到这一点?我不想创建具有同步字段的静态类,因为我不想锁定线程太长时间,因为我正在其他线程中进行一些在线图像分析。
在这里,什么方法是最好的?
干杯,内布里尔
发布于 2012-12-22 08:30:27
你有没有考虑过使用事件总线系统?Otto, an Apache licensed library from Square非常简洁。
您可以创建一个触发新LocationUpdateEvents的位置更新类。任何有兴趣接收此更新的对象都可以有一个用@Subscribe注释的方法。对于进程间通信来说,这是一种非常好的方法,它不依赖于混乱的侦听器接口。
Otto的另一个优点是你的LocationUpdater类可以有一个用@Produce注解的方法。这样,begins侦听LocationUpdateEvents的任何对象都将立即收到一个包含您的LocationUpdater找到的最后一个位置的your。
发布于 2012-12-22 07:31:00
1)创建您的应用类MyApp:
1.1)在清单文件中:
<application
android:name=".MyApp"
....
/>1.2)创建类:
public class MyApp extends Application {
public void onCreate() {
super.onCreate();
}
private volatile Location mLastLocation = null;
public Location getLastLocation(){
return mLastLocation;
}
public void setLastLocation(Location mLastLocation){
this.mLastLocation = mLastLocation;
}
}2)在同一进程中从应用程序中的任何上下文(服务,任何活动)中设置位置(注意使用一个进程)。android支持单进程、多线程):
((MyApp)context.getApplicationContext()).setLastLocation(location);3)要在同一进程中从应用程序中的任何上下文中获取最新位置:
((MyApp)context.getApplicationContext()).getLastLocation();注意:您也可以使用侦听器来获得更好的性能。在MyApp监听器列表中注册并从onLocationChanged触发监听器
https://stackoverflow.com/questions/13998415
复制相似问题