10

我正在使用 Eclipse 来了解 SampleSyncAdapter 示例的工作原理。我无法让我的断点工作。我在多个位置设置了一个断点,但没有一个被击中。例如, 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

在@Eric Woodruff 回答之后,我得到了这个想法,我与那些想要在 Eclipse 中专门针对同步适配器进行调试会话的人分享:1. 切换到 DDMS 透视图 2. 在设备/模拟器进程中找到:synch(见图) 3.然后点击绿色的bug按钮(调试选定的进程:只要它的源项目存在并在工作区中打开) 在此处输入图像描述

这对我来说很好,给了我一个更现实的观点: 在此处输入图像描述

于 2014-11-26T02:03:22.433 回答
0
android:process=":sync"

正如其他答案中给出的那样,效果很好。

最重要的是,如果您对 ContentResolver.requestSync(mAccount, AUTHORITY, settingsBundle) 的调用有任何问题,那么您的服务将不会被调用而不会引发任何错误。您需要仔细检查清单和 xml 以及 java 代码中的授权字符串是否匹配。此外,使用正确的帐户类型正确创建了 Account 对象,并使用以下方法将其添加到 AccountManager:

accountManager.addAccountExplicitly(newAccount, null, null)

(变量名称以官方 android教程命名:

于 2016-08-27T12:37:15.250 回答
0

在检查了几个答案后,这对我有用

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

  2. 在调试模式下运行

  3. 将断点放置在您想要的位置

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

将调试器附加到 Android 进程

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

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

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

于 2019-06-18T19:11:08.380 回答