Android sync adapter初體驗之爲何官方文檔上的代碼不能work

回答:由於其實能夠work網絡

sync adapter就是google推出的一個同步框架,把各類同步操做放在一塊兒智能管理比較省電之類的。對我而言最具體的好處反正就是,不用本身寫代碼了,用框架就能夠了。目前的代碼基本照抄官方文檔。框架

然而呢,用框架知其然不知其因此然更頭疼。ide

用sync adapter首先須要一個dummy authenticator,不過authenticator咱們以後反正也會用的。真的很是高興google連authenticator都幫咱們寫好了……咱們以前還有考慮怎麼寫authenticator。ui

而後須要一個dummy content provider,我不知道咱們會不會用content provider...反正先用了一個dummy的。想來你們都在一個線程裏工做應該也用不上吧?誰知道呢說不定後面寫着寫着就用上了,反正儘可能不要再改給ui的接口就行了。google

而後就是用content resolver設置同步就能夠了。這裏遇到了兩個問題。線程

第一個問題是request sync,即手動同步,不能work。我在SyncAdapter類裏的onPerformSync方法裏(sync的時候會調用這個方法)加了一個log,可是根本看不見這個log。用debug也並無什麼用。debug

一開始我抄官方文檔的代碼的時候,有兩個設置選項我沒看懂、覺得不須要,因此就沒有加入。因而我將這兩個選項加入了,而且去看了看它們的解釋。ContentResolver.SYNC_EXTRAS_EXPEDITED是將當前的sync請求放在請求隊列的第一位,從而優先執行,不過由於我沒有其餘的sync請求因此這個選項沒有那麼大意義。ContentResolver.SYNC_EXTRAS_MANUAL是忽略其餘設置、強行執行sync,可是並無太看懂其餘設置指的是什麼,可能就是忽略若是沒有網絡就不sync之類的設置吧。日誌

然而加入後仍是沒有現象。後來在stackoverflow上看到解答,SyncAdapter的工做是在另外一個線程上,因此在log的時候要選擇no filter才能看到這個log。恍然大悟,果真ok了。orm

第二個問題是periodic sync,即定時同步,在以前的基礎上仍是不能work。接口

這個也是我傻,我看官方文檔上說minimum interval(最小時間間隔)是15min,結果給我當作了maximum interval(最大時間間隔),還以爲十分難以想象。所以我想設置每秒一次確定是不可能的了。(其實也只是爲了觀察現象,我纔不想爲了觀察一個日誌輸出等上15min)。

因此,官方文檔老是能work的,但不必定會把各類坑講清楚,仍是要刷stackoverflow。

相關文章
相關標籤/搜索