Контрольные точки SampleSyncAdapter не работают
Я использую Eclipse, чтобы узнать, как работает пример SampleSyncAdapter. Я не могу заставить свои контрольные точки работать. Я установил точку останова в нескольких местах, но никто не попал. Например, AuthenticatorActivity.onCreate() никогда не вызывается. Кто-нибудь знает, почему?
Спасибо.
Ответы
Ответ 1
Нить исполнения SyncAdapter выполняется в вызванном фоновом процессе, а не в процессе самого приложения, к чему вы подключили свой отладчик java.
Простой и уродливый способ: log() - ваш друг.
Лучше: начните с поиска Отладки службы и найдите, нужно ли это адаптировать для этого случая.
Ответ 2
На самом деле, адаптер синхронизации работает в процессе, в котором он настроен. В документации предлагается установить android: process = ": sync", но это всего лишь предложение. Для отладки вы всегда можете удалить эту строку.
Для Android Studio + Gradle вы можете рассмотреть возможность добавления отладочной версии манифеста в src/debug/. Оказывается, что плагин Gradle не может объединить только атрибут android: process, поэтому вам нужно отдельно определить службу и поставщика в src/release/AndroidManifest.xml и src/debug/AndroidManifest.xml, чтобы не было слияния конфликт.
Ответ 3
У меня была эта проблема, и решение было довольно простым. Как было сказано ранее, SyncAdapter работает в другом потоке, поэтому вам нужно указать отладчик на этот поток.
В Android Studio вы добавляете (код ниже) внутри класса SyncAdapter:
android.os.Debug.waitForDebugger();
Когда вы отлаживаете свое приложение, служба адаптера синхронизации не будет запускаться автоматически, поэтому вы должны запустить его, а затем настроить этот процесс.
Прикрепить отладчик к процессу Android (это значок рядом с зеленой ошибкой)
Он должен работать просто отлично
Ответ 4
После ответа @Eric Woodruff я получил эту идею, которую я разделяю для тех, кто хочет, чтобы сеанс отладки в Eclipse был исключительно предназначен для адаптера синхронизации:
1. Перейдите в режим DDMS
2. В процессе устройства/эмулятора найдите: synch (см. Рисунок)
3. Затем нажмите кнопку "Зеленая ошибка" (Отладка выбранного процесса: при условии, что исходный проект присутствует и открыт в рабочей области)
![enter image description here]()
это отлично работает для меня и дает мне более реалистичную точку зрения:
![enter image description here]()
Ответ 5
android:process=":sync"
Как указано в других ответах, отлично работает.
Кроме того, если ваш вызов ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle) имеет с ним что-то неправильное, ваша служба не будет вызвана без каких-либо ошибок.
Вам нужно дважды проверить соответствие строки Authority в манифесте и xml и java-коде. Также объект Account создается правильно с правильным типом учетной записи и добавляется в AccountManager, используя:
accountManager.addAccountExplicitly(newAccount, null, null)
(имена переменных названы в честь официального учебника по андроиде здесь:
Ответ 6
Проверив несколько ответов, это то, что у меня сработало
-
помечать процесс с помощью: sync in manifest
-
запустить в режиме отладки
-
разместите точку останова там, где вы хотите
-
во время отладки нажмите "Присоединить отладчик к процессу Android"
![Attach Debugger to Android process]()
-
Активируйте синхронизацию один раз - если ваш адаптер синхронизации синхронизируется с элементом (например, контактами), вы можете перейти к настройкам/Учетные записи и резервное копирование/Учетные записи/Ваша учетная запись/Синхронизировать учетную запись и нажать "Синхронизировать сейчас" для активации.
-
Когда синхронизация активирована впервые, вы увидите свое имя пакета: синхронизация в окне "Выбор процесса". Выберите его и нажмите ОК
-
В следующий раз, когда синхронизация активирована, она перейдет к вашей точке останова