小弟想创建一个GPS服务类里面含有子线程监听GPS,由于小弟初学java和android,写着写着发现了个问题,对GPS的监听加上时间的话是没到设定的时间启动了一个新线程吗,我暂时觉得不是,因为我在UI线程监听的时候,可以直接修改UI,但是如果这样的话,我用不知道,怎么在子线程中完成了。郁闷。以下是代码,如果我在UI线程里实例化一个GPSService类。启动监听的话,还是一个线程吧??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??

解决方案 »

  1.   

    貌似在主测监听的时候要用到最后一个参数。。
    requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper) 
      

  2.   

    呵呵~~~我知道怎么启动了~~~private class AcceptThread extends Thread
    {
    public void run()
    {
    Looper.prepare();
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER 
    , 3000, 8, mlocationListener,Looper.myLooper() ); 
    Looper.loop();
    }
    }
    再试试如何传递数据和修改UI,如果在我搞定前没人回答就当分享和散分贴了~~~~
      

  3.   

    终于搞明白了。散分都没人要啊。。用我2楼的代码可以在子线程启动监听~~~~~用looper.quit可以退出~~~~只好把分给顶贴的了