2010-08-22 22 views
5

Ben android için yeniyim, yanımda taşı.Bir iş parçacığı içinde işleyici çalıştırın

Hizmet içinde run() öğesini tanımladığım bir TimerTask kullanıyorum. run İçinde(), ben

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

arıyorum ve ben onun bir arka plan iş parçacığı inanıyoruz beri, Handler oluşturamazsınız şikayet ediyor. Bunu nasıl çözebilirim?

Düzenleme: Kod daha sonra

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(); 
     } 
    }; 

ve pasajda onun aşağıda Planlanmış:

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

ve .start çağrıldığında, requestLocationUpdates()

+0

Bunun için çözümünüz neydi? Aynı problemi yaşıyorum (bir zamanlayıcının içinden GPS'e erişiyorum). – stackoverflowuser2010

cevap

4

başarısız Sen gerek call requestLocationListeyle, yani tercihen ana iş parçacığıyla bir iş parçacığı içinden güncelleme yapar. (requestLocationUpdates'in kendisi hızlıdır ve engellenmez, dolayısıyla bunu yapmanın bir utanması yoktur).

Uygulamanız bunu yapmanıza engel olacak şekilde yazılmışsa, İşleyiciyi kullanabilirsiniz. belgeler hemen hemen tam olarak neye ihtiyacınız olması gereken bir örnek vardır: http://developer.android.com/resources/articles/timed-ui-updates.html

Alternatif olarak, bu talimat ile Runnable oluşturmak ve üzerinde Activity.runOnUiThread() çağırabilir.

+1

TimerTask'ın (iş parçacığı) bir parçası olması gerektiğinden ve bunu Looper.prepare(); requestLocationUpdates(); Looper.loop(); Son bildirimde dondurabilirsiniz Alternatif çözümünüz için, bu bir Hizmet olduğu ve bir UI İş Parçacığı olmadığı için Etkinlik kullanılamaz. Herhangi bir alternatif var mı? – Taranfx

+0

İşleyici hangi iş parçacığını oluşturdunuz? Koddan biraz daha ve hata mesajını gönderir misiniz? – EboMike

1

KonumListener'ı kendi konularım (Looper ile)/HandlerThreads ile karıştırarak konum güncellemelerini almadığım yerde benzer bir şey yaşadım. Çözüm bir PendingIntent ve requestLocationUpdates (sağlayıcı, minTime, minDistance, niyet) kullanmaktı. Bir göz atın: How to receive location updates without using a service

İlgili konular