样品同步适配器断点不起作用。

10

我正在使用Eclipse学习SampleSyncAdapter示例的工作原理。但我的断点无法正常工作。我在多个位置设置了断点,但是都没有被触发。例如,AuthenticatorActivity.onCreate()从未被调用过。有人知道为什么吗?

谢谢。

6个回答

23

实际上,同步适配器在其所配置的进程中运行。文档建议设置android:process=":sync",但这只是一个建议。为了调试,您可以随时删除此行。

对于Android Studio + Gradle,您可能需要在src/debug/中添加清单文件的调试版本。事实证明,Gradle插件无法仅合并android:process属性,因此您需要分别在src/release/AndroidManifest.xml和src/debug/AndroidManifest.xml中定义服务和提供程序,以避免合并冲突。


我在这个问题上纠结了很久。对我有用。非常感谢! - dooleyo

15

执行同步适配器线程发生在一个新的后台进程中,而不是您的应用程序进程中,这是您连接java调试器的进程。

简单且不美观的方法:log()是您的朋友。

更好的方法:首先查看调试服务,并查找是否需要为此案例进行适配。


谢谢。我怀疑这与哪个进程有关,但没有实际信息来支持这个假设。当涉及到断点时,我不熟悉关心哪个进程的调试器。我真的不喜欢Android中的log()。我习惯了更复杂的日志记录方式,它允许程序员更好地控制,包括在发布版本中选择性地删除日志记录代码的能力。谢谢,我会查看链接。 - Mitch
9
请注意,SyncAdapter文档示例在AndroidManifest.xml文件中的Service条目上具有android:process=":sync"属性。在调试期间,如果删除此属性,则服务将在您已经连接到的主进程中运行,这可能更容易进行调试。请注意不要改变原意。 - Tobias
@Eric,我在2011年回答这个问题时可能是这样的。但今天可能不是了。 :) - jcwenger

3
我遇到了这个问题,解决方案非常简单。就像之前所说的一样,SyncAdapter在不同的线程上运行,因此您需要将调试器指向此线程。 在Android Studio中,您可以在SyncAdapter类中添加以下代码:
android.os.Debug.waitForDebugger();

当你调试你的应用程序时,同步适配器服务不会自动运行,因此你需要手动启动它,然后定位到该进程。

将调试器附加到Android进程(它是绿色虫子旁边的图标)

这样就应该能正常工作了。


0

根据@Eric Woodruff的回答,我有一个想法要分享给那些想要在Eclipse中专门为同步适配器进行调试会话的人: 1. 切换到DDMS透视图 2. 在设备/模拟器进程中找到:synch(参见图片) 3. 然后单击绿色的bug按钮(调试所选进程:前提是其源项目存在并在工作区中打开) enter image description here

这对我来说很有效,并且给了我更现实的观点: enter image description here


0

在查看了多个答案后,我找到了解决方法:

  1. 在清单文件中使用 :sync 标记进程

  2. 以调试模式运行

  3. 在想要的位置设置断点

  4. 在调试期间按下“附加调试器到 Android 进程”

Attach Debugger to Android process

  1. 激活同步 - 如果您的同步适配器已与某个项目(例如联系人)同步,则可以转到“设置/帐户和备份/帐户/您的帐户/同步帐户”,然后按“立即同步”按钮进行激活。

  2. 当首次激活同步时,您将在“选择进程”窗口中看到您的包名称:同步。选择它并按OK

  3. 下次激活同步时,它将进入您的断点


0
android:process=":sync"

如其他答案所述,非常有效。

除此之外,如果您调用ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle)时出现任何问题,您的服务将不会被调用,也不会抛出任何错误。 您需要仔细检查清单、XML和Java代码中的Authority字符串是否匹配。同时,确保正确创建了带有正确帐户类型的Account对象,并将其添加到AccountManager中:

accountManager.addAccountExplicitly(newAccount, null, null)

变量名是根据官方 Android 教程 这里 命名的:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接