我刚刚意识到当我的应用程序数据从设置中重置时,会继续触发定期同步,我不希望这种情况发生。
为了解决这个问题,我注意到了AccountManager.removeAccount()
方法,但我不确定这会如何影响我的SyncAdapter定期执行的同步,并且其文档在这方面没有提及任何内容。
我不知道在哪里打电话。
如果在我的应用数据被删除时无法取消预定的定期同步操作,我可以在同步代码中引入检查,以找出发生这种情况的明显线索。
但是,拨打AccountManager.removeAccount()
是否足够?或者这会在运行时引发某种异常(例如,如果执行同步的代码将被执行,我想这个帐户将为null,因此可能会生成NullPointerException)
答案 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);
}