10

SampleSyncAdapter の例がどのように機能するかを学ぶために Eclipse を使用しています。ブレークポイントを機能させることができません。複数の場所にブレークポイントを設定しましたが、どれもヒットしません。たとえば、AuthenticatorActivity.onCreate() が呼び出されることはありません。理由を知っている人はいますか?

ありがとう。

4

6 に答える 6

23

実際には、同期アダプターは構成されているプロセスで実行されます。ドキュメントでは android:process=":sync" を設定することを提案していますが、それは単なる提案です。デバッグのために、いつでもこの行を削除できます。

Android Studio + Gradle の場合、マニフェストのデバッグ バージョンを src/debug/ に追加することを検討してください。Gradle プラグインは android:process 属性だけではマージできないことが判明したため、マージの競合が発生しないように、src/release/AndroidManifest.xml と src/debug/AndroidManifest.xml でサービスとプロバイダーを個別に定義する必要があります。

于 2014-01-04T23:15:35.733 に答える
15

SyncAdapterの実行スレッドは、Javaデバッガーが接続されているアプリケーション自体のプロセスではなく、生成されたバックグラウンドプロセスで発生します。

シンプルで醜い方法:log()はあなたの友達です。

より良い方法:サービスのデバッグを確認することから始めて、それをこのケースに適合させる必要があるかどうかを確認します。

于 2011-12-19T22:23:46.327 に答える
3

私はこの問題を抱えていましたが、解決策は非常に簡単でした。前述のように、SyncAdapter は別のスレッドで実行されるため、デバッガーをこのスレッドにポイントする必要があります。Android Studio では、SyncAdapter クラス内に (以下のコード) を追加します。

android.os.Debug.waitForDebugger();

アプリをデバッグしているとき、同期アダプター サービスは自動的に実行されないため、開始してからそのプロセスをターゲットにする必要があります。

デバッガーを Android プロセスにアタッチします(緑色のバグの横にあるアイコンです)。

それはうまくいくはずです

于 2015-05-13T15:38:09.340 に答える
0
android:process=":sync"

他の回答で与えられたように、うまくいきます。

その上、 ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle) への呼び出しに問題がある場合、エラーがスローされることなくサービスが呼び出されません。Authority 文字列がマニフェストと xml、および Java コードで一致していることを再確認する必要があります。また、Account オブジェクトは正しいアカウント タイプで正しく作成され、次を使用して AccountManager に追加されます。

accountManager.addAccountExplicitly(newAccount, null, null)

(変数名は、公式の Android チュートリアルにちなんで命名されています

于 2016-08-27T12:37:15.250 に答える
0

@Eric Woodruff の回答に続いて、同期アダプター専用の Eclipse でのデバッグ セッションが必要な人のために、このアイデアを共有しました。 1. DDMS パースペクティブに切り替えます。 3. 次に、緑色のバグ ボタンをクリックします (選択したプロセスをデバッグします: ソース プロジェクトが存在し、ワークスペースで開かれている場合)。 ここに画像の説明を入力

これは私にとってはうまく機能し、より現実的な視点を与えてくれます: ここに画像の説明を入力

于 2014-11-26T02:03:22.433 に答える