2013-07-01 63 views
0

我想給LocationClient一個兩分鐘的時間來連接,然後調用getLastLocation。最初,我使用Timer(和TimerTask)實現了這一功能,但由於Timers在sleepmode中不工作,我想將其轉換爲AlarmManager。不過,考慮到AlarmManager會調用另一個類,我對於如何做到這一點感到有些困惑,而我想保持在同一個類中,只是延遲了兩分鐘的時間。AlarmManager調用同一類的函數

這是它如何看起來與計時器。

Timer theTimer = new Timer(); 
    theTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      if(checkIfGooglePlay() && checkTime()) { 
       getPostLocation(); 
       stopSelf(); 
       mLocationClient.disconnect(); 
      } 
     } 
    }, TWO_MINUTES); 
+0

AlarmManager可以使用pendingIntent調用相同的類 –

+0

因此,我可以調用mLocationClient.connect(),然後創建一個PendingIntent,並在該類上設置兩分鐘的AlarmManager? – NumenorForLife

+0

我不知道你的正確要求,但是我知道了什麼程度,你應該使用一個Service類來完成這個任務。可以使用AlarmManager類或以正常方式喚醒,使用界面與您的活動中的服務進行通信... –

回答

0

您可以嘗試使用Java的Thread.sleep()。這是一種靜態方法,因此您不需要實例化新的Thread。它會拋出一個InterruptedException,在簡單的情況下,它不應該打擾你。

http://developer.android.com/reference/java/lang/Thread.html

導致其中發送此消息睡給定的時間間隔(毫秒和納秒給出)的線程。

+1

這是一個可怕的想法。如果它在UI線程上,它將阻塞該線程並導致UI變得無響應,可能會啓動看門狗定時器。如果它在另一個線程上,它將阻止線程完成它的工作。睡眠是99%的時間,這是程序員不知道他在做什麼的標誌。 –

1

Alarm Manager通過掛起的意圖調用廣播接收器。只需使該BroadcastReceiver實現爲註冊該類的私有子類。這樣它就可以完全訪問類成員變量和函數。

+0

Hi @Gabe,我對這個Noobish後續問題表示歉意,但我不知道(並且認爲這是不允許的),擴展了兩個類。如果我沒有弄錯,你推薦的是我寫了一個擴展兩個類的新子類:public class TheSubClass extends TheFirstClass,BroadcastReceiver – NumenorForLife

+0

不,我正在談論一個內部類。一個類可以在其中包含第二個類。 –

+0

Hi @Gabe,我正在調用接收器/服務時遇到一些困難。我已經創建了一個新的問題來解決這個問題:http://stackoverflow.com/questions/17429961/service-calling-alarmmanager-on-another-service。謝謝你的幫助。 – NumenorForLife