首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android多线程应用共享状态

Android多线程应用共享状态
EN

Stack Overflow用户
提问于 2012-12-22 07:16:45
回答 2查看 475关注 0票数 2

我在Android应用程序上工作,有几个线程-其中之一是从GPS接收器每秒1次获取数据。我希望其他线程有权从GPS线程的信息。

我已经尝试过使用消息队列来做这件事,但这使得代码变得相当混乱--我创建的所有新线程都必须以自己的方式处理消息,所以我不得不在每个线程类中执行许多新的实现。

我希望能够以这种方式简单地获取数据:

代码语言:javascript
复制
ApplicationState.getLocation();

所以我可以使用最新的数据。我如何才能做到这一点?我不想创建具有同步字段的静态类,因为我不想锁定线程太长时间,因为我正在其他线程中进行一些在线图像分析。

在这里,什么方法是最好的?

干杯,内布里尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-22 08:30:27

你有没有考虑过使用事件总线系统?Otto, an Apache licensed library from Square非常简洁。

您可以创建一个触发新LocationUpdateEvents的位置更新类。任何有兴趣接收此更新的对象都可以有一个用@Subscribe注释的方法。对于进程间通信来说,这是一种非常好的方法,它不依赖于混乱的侦听器接口。

Otto的另一个优点是你的LocationUpdater类可以有一个用@Produce注解的方法。这样,begins侦听LocationUpdateEvents的任何对象都将立即收到一个包含您的LocationUpdater找到的最后一个位置的your。

票数 3
EN

Stack Overflow用户

发布于 2012-12-22 07:31:00

1)创建您的应用类MyApp:

1.1)在清单文件中:

代码语言:javascript
复制
<application
    android:name=".MyApp"
    ....
/>

1.2)创建类:

代码语言:javascript
复制
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支持单进程、多线程):

代码语言:javascript
复制
((MyApp)context.getApplicationContext()).setLastLocation(location);

3)要在同一进程中从应用程序中的任何上下文中获取最新位置:

代码语言:javascript
复制
((MyApp)context.getApplicationContext()).getLastLocation();

注意:您也可以使用侦听器来获得更好的性能。在MyApp监听器列表中注册并从onLocationChanged触发监听器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13998415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档