过去三年我与Android进行过“开/关”会话,使用可以描述为"Big ball of mud"的应用程序感到高兴。
为了避免这种悲剧,我决定使用Android Bootstarp作为扩展的基础和良好工作惯例的指南。
我认为我设法掌握了匕首背后的基本逻辑(用于在整个应用程序中注入模块和类),但是看起来很愚蠢,我似乎无法掌握登录的方式/地点和时间活动被称为:
此外,这是来自AndroidManifest.xml文件的神秘引用:
<activity
android:name=".authenticator.BootstrapAuthenticatorActivity"
android:excludeFromRecents="true" >
<!--
No intent-filter here! This activity is only ever launched by
someone who explicitly knows the class name
-->
</activity>
这没有用......
好的,所以没有直接回调,没有意图过滤器,我的IDE的“查找用法”按钮也没有帮助(显示该类的用法只有同一个类...)
这给我留下了两个可能的解释:
这与注射有关,我不明白
2.完全错过了其他的东西,我完全错过了。
答案 0 :(得分:2)
在浏览了项目中的每一个课程后,又花了几个小时在traceview上,我在Android Bootstrap Google Group上找到了this。
Bootstrap使用Android内置的身份验证框架,这意味着应用程序中定义了一项服务,用于检查是否存在已保存的API密钥或登录详细信息,如果没有,则启动登录活动。
总而言之,这是一个很好的列表,部分描述了身份验证生命周期:
1.登录Activity从一个intent调用BootStrapAccountAuthenticator类addAccount方法(扩展AbstractAccountAuthenticator类)
2.将BootStrapAccountAuthenticator添加到AccountAuthenticatorSerivce,它在onBind()时返回验证者;被调用(该服务具有android.accounts.AccountAuthenticator
的意图过滤器)
4.另一个名为ApiKeyProvider的类调用AccountManager.getAuthTokenByFeatures(),后者又绑定到AccountAuthenticatorSerivce并返回它获得的密钥。
5.BootstrapServiceProvider在其getService()中返回;方法使用由ApiKeyProvider检索的密钥创建的新BootstrapService(BootstrapService是使用kensawiski的http请求库实现HTTP请求的POJO)。
6.每个片段类(在这种情况下总共三个)调用BootstrapServiceProvider.getService(); onCreateLoader方法中的方法。
就是这样。
关于匕首的使用,所有内容都是从片段本身追溯注入到AccountManager中,包括AccountManager。 我认为这可以允许相对模块化的代码(例如,你可以用不同的代码替换ApiKeyProvider)。
我希望这甚至可以很清楚,甚至可能对任何人都有帮助。
我可能会稍后回来并“重构”这个答案......