我的应用程序包含一个产生HandlerThread的服务,该服务器定期从LocationManager请求位置更新。每次收到更新的位置时,我都会禁用位置更新,并向管理员发送延迟消息,以便将来再次启动更新:
public class VMLocator extends HandlerThread implements LocationListener {
...
private final class VMHandler extends Handler
{
public VMHandler(Looper looper)
{
super(looper);
}
@Override
public void handleMessage(Message msg)
{
if(MSG_START_LOCATION_UPDATES == msg.what)
{
startLocationUpdates();
}
}
}
...
@Override
public void onLocationChanged(Location location) {
...
stopLocationUpdates();
// Schedule updates to start again in the future.
Message msg = new Message();
msg.what = MSG_START_LOCATION_UPDATES;
handler.sendMessageDelayed(msg, 5000); // <-- Testing value. Will be much larger.
...
}
我目前正在使用运行2.3.3的HTC Desire S手机进行测试,使用Eclipse进行开发。手机通过USB线连接到我的开发机器时,一切正常。但是:
注意事项:
我已经尝试在断开连接的情况下从手机上运行并禁用USB调试,结果相同。我觉得我错过的文档中有一些简单的东西,因为我认为Eclipse的运行/调试安装了应用程序,无论USB电缆是否插入,应用程序都应该正常运行。
答案 0 :(得分:1)
感谢dragonroot,你的建议帮助我意识到问题所在。
问题是我在HandlerThread中调用了Debug.waitForDebugger();
。一旦USB电缆断开,此呼叫就会永久停止,因为无法找到调试器连接。
事后看来是一个非常基本的错误,希望这会帮助其他人避免它。