我正在使用 Eclipse 来了解 SampleSyncAdapter 示例的工作原理。我无法让我的断点工作。我在多个位置设置了一个断点,但没有一个被击中。例如, AuthenticatorActivity.onCreate() 永远不会被调用。有谁知道为什么?
谢谢。
我正在使用 Eclipse 来了解 SampleSyncAdapter 示例的工作原理。我无法让我的断点工作。我在多个位置设置了一个断点,但没有一个被击中。例如, AuthenticatorActivity.onCreate() 永远不会被调用。有谁知道为什么?
谢谢。
实际上,同步适配器在配置它的过程中运行。文档建议设置 android:process=":sync",但这只是一个建议。对于调试,您始终可以删除此行。
对于 Android Studio + Gradle,您可以考虑在 src/debug/ 中添加调试版本的清单。事实证明,Gradle 插件无法仅合并 android:process 属性,因此您需要分别在 src/release/AndroidManifest.xml 和 src/debug/AndroidManifest.xml 中定义服务和提供程序,这样就不会发生合并冲突。
SyncAdapter 执行线程发生在一个衍生的后台进程中,而不是在您的应用程序本身的进程中,这是您的 java 调试器附加到的进程。
简单而丑陋的方式: log() 是你的朋友。
更好的方法:从调试服务开始,看看是否需要针对这种情况进行调整。
我遇到了这个问题,解决方案很简单。如前所述,SyncAdapter 在不同的线程上运行,因此您需要将调试器指向该线程。在 Android Studio 上,您在 SyncAdapter 类中添加(下面的代码):
android.os.Debug.waitForDebugger();
当您调试您的应用程序时,同步适配器服务不会自动运行,因此您必须启动它然后定位该进程。
将调试器附加到 Android 进程(它是绿色错误旁边的图标)
它应该工作得很好
在@Eric Woodruff 回答之后,我得到了这个想法,我与那些想要在 Eclipse 中专门针对同步适配器进行调试会话的人分享:1. 切换到 DDMS 透视图 2. 在设备/模拟器进程中找到:synch(见图) 3.然后点击绿色的bug按钮(调试选定的进程:只要它的源项目存在并在工作区中打开)
这对我来说很好,给了我一个更现实的观点:
android:process=":sync"
正如其他答案中给出的那样,效果很好。
最重要的是,如果您对 ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle) 的调用有任何问题,那么您的服务将不会被调用而不会引发任何错误。您需要仔细检查清单和 xml 以及 java 代码中的授权字符串是否匹配。此外,使用正确的帐户类型正确创建了 Account 对象,并使用以下方法将其添加到 AccountManager:
accountManager.addAccountExplicitly(newAccount, null, null)