2011-10-04 25 views
0

我的一個活動的定期更新附近的朋友,這是從其他服務獲得的位置如何根據活動定期休息請求?

目前我使用postDelay:

private Runnable updateNearbyFriendsTask = new Runnable() { 
    @Override 
    public void run() { 

     list = api.getNearby(.....) 

     handler.postDelayed(this, UPDATE_RATE); 
    } 
}; 

的問題是,postDelayed在UI線程上執行,所以這個運行的任務塊UI與互聯網連接差。

什麼是正確的方式來定期從活動的背景休息請求?我不想爲此創建服務,因爲此休息方法僅用於此活動。

編輯

目前轉而使用警報管理使用ScheduledExecutor

this.scheduledExecutor.scheduleWithFixedDelay(new UpdateNearbyFriendsTask(), 0, UPDATE_RATE, TimeUnit.MILLISECONDS); 

private class UpdateNearbyFriendsTask implements Runnable() { 
    @Override 
    public void run() { 

     list = api.getNearby(.....) 

     runOnUiThread(.....) 
    } 
}; 

回答

0

我不明白的問題是與創建服務的,即使它僅用於此活動。

這就是說,看看TimerTask。它似乎是做你想做的。

+0

有沒有簡單的方法將數據從服務發送到我的活動。對於服務,我必須創建廣播接收器併爲我的數據類實現parcable。你不覺得這是開銷嗎? –

+0

如果服務是綁定服務,則可以使用IBinder向活動發送數據和從活動發送數據。有關詳細信息,請參閱綁定服務文檔。 http://developer.android.com/guide/topics/fundamentals/bound-services.html – Noel

+0

所以你建議使用listner參數使用公共方法創建綁定服務? –

0

自長時間運行和正在進行的任務,你會想編寫一個服務或一個爲您做後臺工作的Intent服務。
只要您的時間打勾並讓服務執行網絡活動,就可以ping服務,釋放其他用戶的UI線程。你總是可以查詢服務來了解狀態,或者服務本身可以迴應你的UI線程。

對於滴答定時器,你可以使用報警管理器,或者是其他的東西(我不擅長任何:P)