我一直在为服务器实现自定义AccountAuthenticator
。能够向AccountManager
提供回调非常方便,而不是等待活动结果。
但是,这促使我思考是否可以在我的应用程序中实现类似的流程。
据我通过阅读Android代码了解到,AccountManagerFuture
依赖于AccountAuthenticatorResponse
(AAR)来解决。也就是说,AAR是可以分配的,并且从开始活动到AccountAuthenticatorActivity
(AAA)传递。成功或错误后,AAA会调用AAR方法,解析或拒绝它。然后将其传达给开始活动。
但是,我对原始活动的参考位置在哪里,如何避免内存泄漏以及如何防止垃圾收集这一点有点不清楚。
通过搜索,我看到了一些建议,暗示使用Service
使Future
不被垃圾收集,WeakReference
从活动/回调中泄漏内存。然而,它还不是很清楚,并且还没有在我的脑海中完全结合在一起。
如果一些高级Android开发人员可以向我解释这个循环,我将不胜感激。
以下是我的理解(供参考,我们将采用AccountManager的addAccount
方法):
addAccount
和Activity
提供调用AccountManagerCallback
方法
AmsTask
),它有一个私有成员Response
AccountManager Service
和我的应用程序是两个流程。无论我从我的应用程序生成哪个自定义服务,它仍将在相同的过程中运行,对吗?这是否意味着我们无法重现这种流动?一种想法是因为AccountAuthenticators
来自不同的应用程序,而不同的进程/用户,这需要使用AIDL。但是,如果我的自定义FutureTask和响应包含在一个进程中,那么常规服务可能会起作用。AccountAuthenticator
服务获取绑定并调用addAccount
,并传入响应。onResult
方法,提供结果(如果发起活动结束或重新创建,如何避免内存泄漏?回调不会然后在不再活动的实例上调用?)AccountManager Service
然后将响应传播回原始活动(原始活动如何不被垃圾收集?)请提供您的想法和说明。我确定有很多!