小弟想创建一个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??
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??
解决方案 »
- MediaScanner扫描的疑问!急!
- eclipse调试android遇到的的问题
- Android的Service服务怎么保存数据??
- WebView 有关资源加载的问题
- socket 编程,如何开发一个聊天软件
- 【求助】我打算全程翻译Google Android APIs所有条目,但需要这个帮助!
- 求最简单制作APP的方法(嵌入网站形式)
- 如何让系统的相册显示指定目录下的视频??
- 请问下各位JAVA JDK与JAVA SE,EE,ME之间的关系
- 问gallery的子项选择前和选择后的背景颜色改变,如何实现?
- 当手机处于待机状态下(屏幕没光+已锁屏),比如长按菜单键或返回键,怎么打开一个应用程序
- 怎么设置Spinner的弹出框的显示位置??
requestLocationUpdates (long minTime, float minDistance, Criteria criteria, LocationListener listener, Looper looper)
{
public void run()
{
Looper.prepare();
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER
, 3000, 8, mlocationListener,Looper.myLooper() );
Looper.loop();
}
}
再试试如何传递数据和修改UI,如果在我搞定前没人回答就当分享和散分贴了~~~~