我有以下问题。我用 Looper 实现了我的线程。
public class GeoLocationThread extends Thread{
public Handler handler;
private General general;
public void run(){
Looper.prepare();
handler = new IncomingHandler(general);
Looper.loop();
}
public GeoLocationThread(General general){
this.general=general;
}
private static class IncomingHandler extends Handler{
private final WeakReference<General> mService;
IncomingHandler(General service) {
mService = new WeakReference<General>(service);
}
@Override
public void handleMessage(Message msg)
{
General service = mService.get();
if (service != null) {
Location location=service.getLl().getLocation();
if(location.getAccuracy()<40){
service.setOrigin(new GeoPoint((int) (location.getLatitude() * 1E6),(int) (location.getLongitude() * 1E6)));
}
}
}
}
}
我想做以下事情:
GeoLocationThread locationThread=new GeoLocationThread(this);
locationThread.start();
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll, locationThread.handler.getLooper());
其中 lm 是 LocationManager。从我的日志和测试中,我可以说locationThread.handler.getLooper()
返回 null 而不是 Looper。
我不知道为什么它是空的。我试图打电话给locationThread.isAlive()
返回true。我也试图得到locationThread.handler;
我知道不为空的。我也做了很多谷歌搜索,但我没有找到比文档更多的东西。
非常感谢您的回答。