找不到登录活动

时间:2013-06-20 22:23:19

标签: android dependency-injection

过去三年我与Android进行过“开/关”会话,使用可以描述为"Big ball of mud"的应用程序感到高兴。

为了避免这种悲剧,我决定使用Android Bootstarp作为扩展的基础和良好工作惯例的指南。

我认为我设法掌握了匕首背后的基本逻辑(用于在整个应用程序中注入模块和类),但是看起来很愚蠢,我似乎无法掌握登录的方式/地点和时间活动被称为:

  • “home”活动(分配了启动器/家庭意图过滤器的活动)称为CarouselActivity,用于显示登录后获得的所有内容(用户,新闻和签到片段)。没有对登录活动的引用。
  • 登录活动名为BootstrapAuthenticatorActivity
  • 对它的唯一引用是在BootstrapModule类中,它被添加到@Module注释的“injects”成员中。
  • 此外,这是来自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.完全错过了其他的东西,我完全错过了。

1 个答案:

答案 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是使用kensawis​​ki的http请求库实现HTTP请求的POJO)。

6.每个片段类(在这种情况下总共三个)调用BootstrapServiceProvider.getService(); onCreateLoader方法中的方法。

就是这样。

关于匕首的使用,所有内容都是从片段本身追溯注入到AccountManager中,包括AccountManager。 我认为这可以允许相对模块化的代码(例如,你可以用不同的代码替换ApiKeyProvider)。

我希望这甚至可以很清楚,甚至可能对任何人都有帮助。

我可能会稍后回来并“重构”这个答案......