2011-12-19 64 views
10

我使用Eclipse來了解SampleSyncAdapter示例如何工作。我無法讓我的斷點工作。我在多個位置設置了一個斷點,但沒有一個被擊中。例如,AuthenticatorActivity.onCreate()永遠不會被調用。有人知道爲什麼SampleSyncAdapter斷點不工作

謝謝。

回答

12

SyncAdapter執行線程發生在派生的後臺進程中,而不是在應用程序本身的進程中,而這正是您的java調試器所連接的進程。

簡單而醜陋的方式:log()是你的朋友。

更好的方法:首先查看Debugging a service並找出是否需要適應這種情況。

+0

感謝我懷疑它有東西做什麼,但沒有實際的信息來支持這個假設,我不熟悉那些關心哪個進程到達斷點的調試器,我真的不喜歡Android中的log(),我已經習慣了更多複雜的日誌記錄,允許程序員更好地控制,包括在發佈版本中有選擇地刪除日誌代碼的能力。謝謝,我會查看鏈接。 – Mitch 2011-12-20 20:34:17

+8

FYI SyncAdapter文檔示例在AndroidManifest.xml中的服務條目中具有 「android:process =」:sync「' 屬性。在調試過程中,可以更容易地刪除此屬性,以便服務將在您的IDE已經附加到的主進程中運行。 – Tobias 2013-12-15 10:00:04

+0

我不確定這應該是被接受的答案 – 2015-07-22 17:29:22

21

實際上,同步適配器在配置過程中運行。該文檔建議設置android:process =「:sync」,但這只是一個建議。對於調試,你總是可以刪除這一行。

對於Android Studio + Gradle,您可能會考慮在src/debug /中添加清單的調試版本。原來,Gradle插件無法在android:process屬性中合併,因此您需要分別在src/release/AndroidManifest.xml和src/debug/AndroidManifest.xml中定義服務和提供程序,以避免合併衝突。

+0

我一直拉我的頭髮在這一個。爲我工作。非常感謝! – dooleyo 2015-03-06 21:04:57

+0

你先生,是英雄 – drees 2015-07-22 17:24:24

+0

這應該是公認的答案!謝謝! – 2016-10-27 12:26:49

0

繼@Eric伍德拉夫答案我有這個想法,我爲那些誰想要在Eclipse中調試會話專門爲同步適配器分享: 1.切換到DDMS透視圖 2.在設備/仿真處理定位:同步(見圖片) 3.然後點擊綠色的bug按鈕(調試所選擇的過程:提供它的開源項目存在,並且在工作區中打開) enter image description here

這個工作對我很好,給我一個更現實的觀點: enter image description here

2

我有這個問題,解決方法很簡單。如前所述,SyncAdapter運行在不同的線程上,因此您需要將調試器指向該線程。 在Android Studio中添加(下面的代碼)的SyncAdapter類中:

android.os.Debug.waitForDebugger(); 

當你調試你的應用程序同步適配器服務將不會自動運行,所以你必須啓動它,然後再指定處理。

安裝調試到Android流程(它的旁邊有綠色錯誤的圖標)

這應該只是罰款

+0

非常感謝! – murrayc 2015-05-19 11:34:03

0
android:process=":sync" 

在其他的答案給出的偉大工程。最重要的是,如果您對ContentResolver.requestSync(mAccount,AUTHORITY,settingsBundle)的調用有任何問題,那麼您的服務將不會被調用而不會引發任何錯誤。 您需要仔細檢查權限字符串是否在清單和xml以及java代碼中匹配。另外,客戶對象與正確的帳戶類型正確地創建和使用添加到的AccountManager:

accountManager.addAccountExplicitly(newAccount, null, null) 

(變量名官方Android教程here後命名爲: