2

我刚刚意识到,当我的应用程序数据从设置中重置时,定期同步会继续被触发,我不希望这种情况发生。

为了解决这个问题,我注意到了这个AccountManager.removeAccount()方法,但我不确定这会如何影响我的 SyncAdapter 定期执行的同步,并且它的文档没有提到这方面的任何内容。而且我不知道在哪里称呼它。

如果在我的应用程序数据被删除时无法取消预定的定期同步操作,我可以在同步代码中引入检查,以获得一些明显的线索来表明这种情况发生了。但是打电话就够了AccountManager.removeAccount()吗?或者这会在运行时引发某种异常(例如,如果执行同步的代码将被执行,我想帐户将为空,因此可能会生成 NullPointerException)

4

2 回答 2

2

您可以订阅此广播以检测设置中的清除数据。但是请注意,这将在您的 SyncAdapter 工作之外的另一个线程中处理,因此无论如何您都必须对您的同步适配器代码进行一些检查。

您的另一个问题-卸载应用程序后保留您的应用程序帐户和同步适配器-真的很奇怪。您可以发布您的 AndroidManifest.xml 和身份验证器服务元数据吗?

于 2014-05-07T07:29:27.307 回答
0

通常,当应用程序卸载时,该帐户会被删除。要使用 Accountmanager 的 removeaccount 方法,下面是示例代码。

    AccountManager mgr = AccountManager.get(getApplicationContext());
    mgr.invalidateAuthToken(AUTHORITY , null);
    Account[] accounts = mgr.getAccounts();

    for (int index = 0; index < accounts.length; index++) {
        if (accounts[index].type.intern() == AUTHORITY)
            mgr.removeAccount(accounts[index], null, null);
    }
于 2014-05-07T06:18:38.763 回答