我正在使用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中定义服务和提供程序,以避免合并冲突。
执行同步适配器线程发生在一个新的后台进程中,而不是您的应用程序进程中,这是您连接java调试器的进程。
简单且不美观的方法:log()是您的朋友。
更好的方法:首先查看调试服务,并查找是否需要为此案例进行适配。
android:process=":sync"
属性。在调试期间,如果删除此属性,则服务将在您已经连接到的主进程中运行,这可能更容易进行调试。请注意不要改变原意。 - Tobiasandroid.os.Debug.waitForDebugger();
当你调试你的应用程序时,同步适配器服务不会自动运行,因此你需要手动启动它,然后定位到该进程。
将调试器附加到Android进程(它是绿色虫子旁边的图标)
这样就应该能正常工作了。
根据@Eric Woodruff的回答,我有一个想法要分享给那些想要在Eclipse中专门为同步适配器进行调试会话的人: 1. 切换到DDMS透视图 2. 在设备/模拟器进程中找到:synch(参见图片) 3. 然后单击绿色的bug按钮(调试所选进程:前提是其源项目存在并在工作区中打开)
这对我来说很有效,并且给了我更现实的观点:
android:process=":sync"
如其他答案所述,非常有效。
除此之外,如果您调用ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle)时出现任何问题,您的服务将不会被调用,也不会抛出任何错误。 您需要仔细检查清单、XML和Java代码中的Authority字符串是否匹配。同时,确保正确创建了带有正确帐户类型的Account对象,并将其添加到AccountManager中:
accountManager.addAccountExplicitly(newAccount, null, null)
变量名是根据官方 Android 教程 这里 命名的: