Обработчик внутри потока

Я новичок в андроиде, носите его со мной.

У меня есть TimerTask, для которого я определяю run () внутри Сервиса. Внутри run (), я звоню

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_UPDATES_MIN_TIME_MS, LOCATION_UPDATES_MIN_DISTANCE_M, gpsListener); 

И он жалуется, что не может создать Handler, так как я считаю его фоновым потоком. Как это решить?

Изменить: фрагмент кода

 locationTask = new TimerTask() { @Override public void run() { Log.d(Commands.TAG, "Running location Task"); myLocationProvider = new MyLocationProvider(locationManager, handler, MyService.this); myLocationProvider.start(); myLocationProvider.stop(); } }; 

И позже его Запланировано как ниже:

 locationTimer = new Timer(); locationTimer.schedule(locationTask, 10000, cmds.getAlertInterval()*60); 

И когда вызывается .start, requestLocationUpdates () не работает

Вам нужно вызвать requestLocationUpdates из потока с помощью петлителя, то есть предпочтительно основного потока. (RequestLocationUpdates сам быстро и не блокирует, поэтому нет никакого позора в этом).

Если ваше приложение написано таким образом, что это просто мешает вам это сделать, вы можете использовать обработчик. В документации есть пример, который должен быть в точности точным, что вам нужно: http://developer.android.com/resources/articles/timed-ui-updates.html

Кроме того, вы можете создать Runnable с этой инструкцией и вызвать Activity.runOnUiThread() на нем.

Я испытал нечто подобное, когда я не мог получить обновления местоположения, смешивая LocationListener с моими собственными Threads (с Looper) / HandlerThreads. Решение заключалось в использовании PendingIntent и requestLocationUpdates (поставщик, minTime, minDistance, намерение). Взгляните на: Как получать обновления местоположения без использования службы