首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个线程中使用等待和通知

在一个线程中使用等待和通知
EN

Stack Overflow用户
提问于 2011-05-06 18:20:41
回答 2查看 2.1K关注 0票数 1

我有一个应用程序做下一件事:通过DDMS接收GPS数据并将它们存储在数据库中,当数据存储在数据库中时,我还应该启动一个客户端线程来读取存储在数据库中的新数据,并将其发送到远程服务器!

为了接收GPS数据,我做了这样的事情:

代码语言:javascript
复制
 lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);


  locationListener = new MyLocationListener();


   lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);

在我的LocationChanged方法中,我将GPS数据插入到数据库中:

代码语言:javascript
复制
private class MyLocationListener implements LocationListener 

    {
        @Override

        public void onLocationChanged(Location loc) {

            if (loc != null) {

                latitude=(int)(loc.getLatitude()* 1E6);

                longitude=(int)(loc.getLongitude()* 1E6);

              db.insertData1(longitude,latitude);
           }

        }

现在我的问题是:

我应该如何/从哪里开始客户机thread....which读取数据库?

它首先尝试在这一行之后启动客户端线程:

代码语言:javascript
复制
m.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);

但是,如果我这样做,我就有可能得到一个强制关闭,因为客户端线程读取的数据库可能是空的。

我怎么知道什么时候开始读取数据库?

我是否应该对客户端线程使用等待/通知协议,以便在获得GPS更新时读取数据库?我应该在一个线程中实现等待/通知谁??Thx.我在这里有进一步的问题:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 18:26:35

等待/通知是用于在多个线程并发访问共享数据时同步访问共享数据。它不适用于你的情况。

在开始读取数据库之前,只需简单地检查数据库是否存在:Query if Android database exists!

票数 1
EN

Stack Overflow用户

发布于 2011-05-06 18:27:26

听起来,您正在尝试使用wat / notify作为传递消息的通用方式。不是的。

如果你真的希望B只在A完成后才能运行,那么就这样做。在你的主线程上运行A然后B。不需要搞砸w/同步/等待/通知。

如果A和B可以同时运行,则创建一个在DB线程和发送线程之间共享的锁对象,

代码语言:javascript
复制
Object lock = new Object();

在每个线程中,同步对此对象的操作。

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

https://stackoverflow.com/questions/5915449

复制
相关文章

相似问题

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