У меня проблема с моим приложением. Мое приложение на самом деле является сервисом. У меня есть служба Main extends, у нее есть частная переменная петлителя Looper для получения петлителя HandlerThread. В функции onCreate
я инициализирую диспетчер местоположения, прослушиватель местоположения и HandlerThread (который устанавливает свой цикл в переменную цикла), затем я пытаюсь использовать requestLocationUpdates
, передавая переменную цикла в качестве цикла. я получаю сообщение об ошибке
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");
}
И HandlerThread:
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 он приводит к сбою всего эмулятора, убивая его процессы (?).