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