我有一个应用程序做下一件事:通过DDMS接收GPS数据并将它们存储在数据库中,当数据存储在数据库中时,我还应该启动一个客户端线程来读取存储在数据库中的新数据,并将其发送到远程服务器!
为了接收GPS数据,我做了这样的事情:
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationListener = new MyLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);在我的LocationChanged方法中,我将GPS数据插入到数据库中:
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读取数据库?
它首先尝试在这一行之后启动客户端线程:
m.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,locationListener);但是,如果我这样做,我就有可能得到一个强制关闭,因为客户端线程读取的数据库可能是空的。
我怎么知道什么时候开始读取数据库?
我是否应该对客户端线程使用等待/通知协议,以便在获得GPS更新时读取数据库?我应该在一个线程中实现等待/通知谁??Thx.我在这里有进一步的问题:)
发布于 2011-05-06 18:26:35
等待/通知是用于在多个线程并发访问共享数据时同步访问共享数据。它不适用于你的情况。
在开始读取数据库之前,只需简单地检查数据库是否存在:Query if Android database exists!
发布于 2011-05-06 18:27:26
听起来,您正在尝试使用wat / notify作为传递消息的通用方式。不是的。
如果你真的希望B只在A完成后才能运行,那么就这样做。在你的主线程上运行A然后B。不需要搞砸w/同步/等待/通知。
如果A和B可以同时运行,则创建一个在DB线程和发送线程之间共享的锁对象,
Object lock = new Object();在每个线程中,同步对此对象的操作。
https://stackoverflow.com/questions/5915449
复制相似问题