2011-03-11 73 views
6

我記得從同步適配器或同步進度事件的某個ResultReceiver讀取有關廣播接收器接口的信息。 SyncAdapter模式中是否有內置內容,還是內置了?如何從Android SyncAdapter監聽進度?

+0

我已經使用它來通過活動更新UI上的進度。由於我沒有使用同步適配器,因此我使用了不確定的進度。我會查看你的同步代碼,看看你如何使用它,而不是一個連續的非停止過程,例如使用線程組或Executor服務中的多個線程。您也可以每隔幾秒鐘/分鐘向接收器發送額外的參數,例如'code' intent.putExtra(SYNCING_STATUS_TIME,30); 'code' – 2014-04-23 11:46:33

回答

5

什麼工作:

的方法,2010年穀歌的IO會議建議,Developing Android REST client applications是將列到你的ContentProvider作爲標記來指示記錄被取出或放入或等這使得每行微調(或其他視覺變化)將放置在您的用戶界面中。您可以通過驅動ListView的自定義CursorAdapter來實現。您的ContentProvider正在掛鉤,以便根據需要更改標誌。

什麼不:

你也可以使用一個SyncStatusObserver - 這是幾乎無用的,因爲它響應狀態的每一個變化,不只是你的特定帳戶/ contentauthority對了,真不知道除了變化發生之外,你什麼都不是。因此,您無法分辨正在同步的內容,並且無法將「同步事件開始」與「同步事件結束」區分開來。一文不值。 :P

+1

我去了pub-sub方法,我使用ResultReceiver從同步線程迴應UI。該服務在同步線程正在運行時添加和刪除訂閱者,並且如果有可用的話,它將廣播給活動的接收者。我正在考慮使用SyncStatusObserver來觸發UI的週期性同步已觸發 - 我會將其代入「開始 - 同步」訂閱狀態事件。 – mobibob 2011-03-15 18:21:19

11

我剛從一個同步適配器實現了一個廣播接收器,它的工作原理就像發條一樣!

使用接收器集作爲內部類,並調用onCreate中的registerReceiver和onDestroy中的unregisterReceiver爲我做了這個。

正如我有一個策略的方法,產卵和查詢多個線程,所有我在SyncAdapter運行的開頭是:

Intent intent = new Intent(); 
intent.setAction(ACTION); 
intent.putExtra(SYNCING_STATUS, RUNNING); 
context.sendBroadcast(intent); 

,並在同步運行結束我有:

intent.putExtra(SYNCING_STATUS, STOPPING); 
context.sendBroadcast(intent); 

在我的活動,我宣佈:

onCreate(Bundle savedInstance){ 

super.onCreate(savedInstance); 
SyncReceiver myReceiver = new SyncReceiver(); 
RegisterReceiver(myReceiver,ACTION); 

} 



onDestroy(){ 

super.onPause(); 
unRegisterReceiver(myReceiver); 

} 



public class SyncReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
      Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     //do something 
    } 
    } 
} 

對於這種情況,你不需要添加您的接收器到清單文件。按原樣使用!

+0

郵件這很有趣,可能非常準確,但問題是關於監聽(監聽)的進度。問題在於我的同步適配器正在運行並且正在運行,看不到任何結果,所以我想向UI提供進度。 – mobibob 2014-04-19 23:11:04

+0

我已經使用它來通過活動更新UI上的進度。由於我沒有使用同步適配器,因此我使用了不確定的進度。我會看看你的同步代碼,看看你如何使用它,而不是一個連續的非停止過程,例如使用線程組中的多個線程或Executor服務 – 2014-04-23 11:40:15

+0

如果你正在尋找一種方法,這是最好的答案來操縱SyncAdapter的開始和結束。 – MurifoX 2014-12-02 16:54:42