android子线程中处理GPS代码
我想创建一个GPS服务类里面含有子线程监听GPS,由于小弟初学java和android,写着写着发现了个问题,对GPS的监听加上时间的话。。。是没到设定的时间启动了一个新线程吗,我暂时觉得不是,因为我在UI线程监听的时候,可以直接修改UI,但是如果这样的话,我用不知道,怎么在子线程中完成了。。。。郁闷。。。。以下是代码,如果我在UI线程里实例化一个GPSService类。。。。启动监听的话,还是一个线程吧??
Java code?public class GPSService { private final Handler mHandler; private final Context mContext; private final LocationManager mlocManager; private LocationListener mlocationListener; public String sb1; public GPSService(Context context, Handler handler) { mContext = context; mHandler = handler; mlocManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE); mlocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { // 当GPS定位信息发生改变时,更新位置 update(location); } @Override public void onProviderDisabled(String provider) { // GPS关闭,清空信息 } @Override public void onProviderEnabled(String provider) { // 当GPS LocationProvider可用时,更新位置 } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }; } private void stop() { mlocManager.removeUpdates(mlocationListener); } public void start() { mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 3000, 8, mlocationListener ); } public void update(Location newLocation) { if (newLocation != null) { DecimalFormat df = new DecimalFormat("###.00"); StringBuilder sb = new StringBuilder(); sb.append("经度:"); sb.append(df.format(newLocation.getLongitude())); sb1=sb1.toString(); } } }
如果我在代码里加上private class AcceptThread extends Thread{}把监听的代码加在这里面是不是就是两个线程了呢??如果监听过程作为子线程了,那么可以直接调用update修改sb1吗??是否要给子线程建立looper??
貌似在主测监听的时候要用到最后一个参数。。。。。 requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper) private class AcceptThread extends Thread { public void run() { Looper.prepare(); mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 3000, 8, mlocationListener,Looper.myLooper() ); Looper.loop(); } }
再试试如何传递数据和修改UI
|