SampleSyncAdapter Точки Останова Не Работают


Я использую Eclipse, чтобы узнать, как работает Пример SampleSyncAdapter. Я не могу заставить свои точки останова работать. Я установил точку останова в нескольких местах, но ни один не пострадал. Например, AuthenticatorActivity.onCreate() никогда не вызывается. Кто-нибудь знает почему?

Спасибо.

5 10

5 ответов:

Поток SyncAdapter выполнения происходит в порожденном фоновом процессе, а не в процессе самого приложения, к которому подключен отладчик java.

Простой и уродливый способ: log () - ваш друг.

Лучший способ: начните с просмотраотладки службы и найдите, нужно ли это адаптировать для этого случая.

На самом деле адаптер синхронизации запускается в процессе, в котором он настроен. В документации предлагается установить android: process=": sync", но это только предположение. Для отладки вы всегда можете удалить эту строку.

Для Android Studio + Gradle можно добавить отладочную версию манифеста в src / debug/. Оказывается, что плагин Gradle не может объединить только атрибут android: process, поэтому вам нужно определить сервис и поставщика в src / release / AndroidManifest.xml и src / debug / AndroidManifest.xml отдельно, так что нет конфликта слияния.

У меня была эта проблема, и решение было довольно простым. Как было сказано ранее, SyncAdapter работает в другом потоке, поэтому необходимо указать отладчику на этот поток. В Android Studio вы добавляете (код ниже) внутри класса SyncAdapter:

android.os.Debug.waitForDebugger();

При отладке приложения служба адаптера синхронизации не будет работать автоматически, поэтому вам нужно запустить ее, а затем настроить целевой процесс.

прикрепить отладчик к процессу Android (это значок рядом с зеленым цветом Ошибка)

Это должно работать просто отлично

После ответа @Eric Woodruff я получил эту идею, которую я разделяю для тех, кто хочет сеанс отладки в Eclipse, посвященный исключительно адаптеру синхронизации: 1. Переключиться на перспективу DDMS 2. В процессе устройства/эмулятора найдите: synch (см. рисунок) 3. Затем нажмите на зеленую кнопку ошибка (отладка выбранного процесса: при условии, что исходный проект присутствует и открыт в рабочей области ) Введите описание изображения здесь

Это прекрасно работает для меня и дает мне более реалистичную точку зрения: Введите описание изображения здесь

android:process=":sync"

Как указано в других ответах работает отлично.

Кроме того, если ваш вызов ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle) имеет что-то не так с ним, ваш сервис не будет вызван без каких-либо ошибок. Вам нужно дважды проверить, что строка полномочий совпадает в манифесте и xml и коде java. Также объектом аккаунт создан правильно с правильным типом счета и добавлены в пакет, используя:

accountManager.addAccountExplicitly(newAccount, null, null)

(переменная имена названы в честь официального учебника для android здесь :