如何在应用重置数据时取消定期同步?如何在卸载该应用时删除相关帐户?

时间:2014-03-06 03:54:45

标签: android android-syncadapter android-account

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

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

如果在我的应用数据被删除时无法取消预定的定期同步操作,我可以在同步代码中引入检查,以找出发生这种情况的明显线索。 但是,拨打AccountManager.removeAccount()是否足够?或者这会在运行时引发某种异常(例如,如果执行同步的代码将被执行,我想这个帐户将为null,因此可能会生成NullPointerException)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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);
    }