Android AccountManagerFuture或onActivityResult回调

时间:2016-09-08 23:03:11

标签: java android android-activity future accountmanager

我一直在为服务器实现自定义AccountAuthenticator。能够向AccountManager提供回调非常方便,而不是等待活动结果。

但是,这促使我思考是否可以在我的应用程序中实现类似的流程。

据我通过阅读Android代码了解到,AccountManagerFuture依赖于AccountAuthenticatorResponse(AAR)来解决。也就是说,AAR是可以分配的,并且从开始活动到AccountAuthenticatorActivity(AAA)传递。成功或错误后,AAA会调用AAR方法,解析或拒绝它。然后将其传达给开始活动。

但是,我对原始活动的参考位置在哪里,如何避免内存泄漏以及如何防止垃圾收集这一点有点不清楚。

通过搜索,我看到了一些建议,暗示使用Service使Future不被垃圾收集,WeakReference从活动/回调中泄漏内存。然而,它还不是很清楚,并且还没有在我的脑海中完全结合在一起。

如果一些高级Android开发人员可以向我解释这个循环,我将不胜感激。

以下是我的理解(供参考,我们将采用AccountManager的addAccount方法):

    使用addAccountActivity提供调用
  • AccountManagerCallback方法
  • AccountManager会生成一个新的FutureTask(AmsTask),它有一个私有成员Response
  • 响应实现了AIDL,它用于进程间通信(在AccountManager服务和发起的Activity之间,我猜)...所以基本上这已经引入了一个限制,其中AccountManager Service和我的应用程序是两个流程。无论我从我的应用程序生成哪个自定义服务,它仍将在相同的过程中运行,对吗?这是否意味着我们无法重现这种流动?一种想法是因为AccountAuthenticators来自不同的应用程序,而不同的进程/用户,这需要使用AIDL。但是,如果我的自定义FutureTask和响应包含在一个进程中,那么常规服务可能会起作用。
  • AccountManager服务从我的AccountAuthenticator服务获取绑定并调用addAccount,并传入响应。
  • 我在验证器中执行我的操作,生成一个活动,然后完成并调用onResult方法,提供结果(如果发起活动结束或重新创建,如何避免内存泄漏?回调不会然后在不再活动的实例上调用?)
  • AccountManager Service然后将响应传播回原始活动(原始活动如何不被垃圾收集?)

请提供您的想法和说明。我确定有很多!

0 个答案:

没有答案
相关问题