android 多线程刷新Location
我在做的一个功能是过几分钟就提交一次坐标到服务器,进行保存,跟踪司机地理位置。
主线程:
private static final String CONTEXT = Context.LOCATION_SERVICE; // 环境
LocationManager locationManager;
/** 获得LocationManager实例 */
public LocationManager getLocationManager() {
return (LocationManager) getSystemService(CONTEXT);
}
onCreate方法:
{
Thread t = new Thread(new getLocation(provider));
t.setDaemon(true);// 设置为后台线程
t.start();
}
Handler h = new Handler() {
@Override
public void handleMessage(Message msg) {
LocationManager l = getLocationManager();
try {
String provider1 = getProvider(getLocationManager());
TimeUnit.MICROSECONDS.sleep(100);
l.requestLocationUpdates(provider1, 0, 0, locationListener);
Location location = l.getLastKnownLocation(provider1);
//打印效果。
System.out.println(location.getLatitude()
+ "{}{}{}{}{}{}{}{}___");
// 为绘制标志的类设置坐标,非常重要,刷新Location
mapOverlay.setLocation(location);
Thread t = new Thread(new getLocation(provider1));
t.start();
Thread.yield();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.handleMessage(msg);
}
};
private class getLocation implements Runnable {
@Override
public void run() {
Message m = new Message();
h.handleMessage(m); // Handler的实例
Thread.yield();
}
}
getLocation 和handler 这2个线程,让他们相互调用,形成死循环状态。
mapOverlay.setLocation(location); 这个方法太重要了。。。
程序总是出现在线程错误,不知道哪位大侠能够指点下原因:
下面是截图
更多相关文章
- Android中简单的电话管理与短信管理App编写实例
- Android(安卓)viewpager 拿到当前显示的 fragment 的实例
- Android中一种ThreadPool的实现
- Android之SimpleAdapter简单实例和SimpleAdapter参数说明
- Android(安卓)Service那些不得不说的事-之一
- Android之实现手电筒实例
- Android(安卓)Audio相关 AudioFlinger类
- Android/J2SE计算两个位置坐标之间的距离