我的应用程序有问题。我的应用程序实际上是一项服务。我有 Main extends Service,它有私有 Looper looper 变量来获取 HandlerThread looper。在onCreate
函数中,我初始化了位置管理器、位置侦听器和 HandlerThread(将其 looper 设置为 looper 变量),然后我尝试使用requestLocationUpdates
将 looper 变量作为 looper 传递。我收到一个错误
09-22 17:30:24.069: E/AndroidRuntime(1414): Caused by: java.lang.IllegalArgumentException: looper==null
我应该对这个 HandlerThread 做些什么吗?也许开始吧?:>
我没有粘贴任何代码,因为它很长,而且我不知道适合解决问题的相关部分。因此,我很乐意传递您可能需要的任何代码(HandlerThread?还有其他吗?)
谢谢你的帮助。
**编辑* *
好的,onCreate 函数:
public void onCreate() {
super.onCreate();
Log.d("Service", "Service onCreate starts");
running = true;
lt = new LooperThread("GPSIntentLT");
serviceLocationM = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
serviceLocationL = new MyLocationListener();
requestUpdates(serviceLocationL);
Log.d("Service", "Service onCreate ends");
}
requestUpdates 函数(上面调用,出现错误):
private void requestUpdates(LocationListener listener)
{
Log.d("Service", "requestUpdates starts");
serviceLocationM.removeUpdates(listener);
flag = displayGpsStatus();
switch(flag)
{
case 0:
Log.d("Service", "No Location Provider");
break;
case 1:
Log.d("Service", "Network Provider");
serviceLocationM.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10, 25, listener, theLooper);
break;
case 2:
Log.d("Service", "GPS Provider");
serviceLocationM.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 25, listener, theLooper);
break;
}
Log.d("Service", "requestUpdates ends");
}
和处理线程:
private class LooperThread extends HandlerThread{
public LooperThread(String name) {
super(name);
Log.d("Service", "LooperThread constructor starts");
theLooper = getLooper();
Log.d("Service", "LooperThread constructor ends");
}
@Override
public void run() {
super.run();
Log.d("Service", "LooperThread run called");
}
}
最后,这个应用程序的 logcat:
09-22 18:21:47.997: D/Service(386): Service onCreate starts
09-22 18:21:47.997: D/Service(386): LooperThread constructor starts
09-22 18:21:48.007: D/Service(386): LooperThread constructor ends
所以它确实在 requestLocationUpdates 功能上下降,它发生在 2.2 模拟器上,在 2.3.3 上它通过杀死它的进程(?)来崩溃整个模拟器。