0

在过去的三年里,我与 Android 进行了一次“开/关”会话,并以一款可以被描述为“大泥球”的应用程序达到高潮。

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

我想我设法掌握了 dagger 背后的基本逻辑(用于在整个应用程序中注入模块和类),但尽管看起来很愚蠢,但我似乎无法掌握登录 Activity 的调用方式/位置或时间:

  • “主页”活动(分配了启动器/主页意图过滤器的活动)称为 CarouselActivity,用于显示您登录后获得的所有内容(用户、新闻和签到片段)。没有提及登录活动。
  • 登录活动称为 BootstrapAuthenticatorActivity
  • 对它的唯一引用是在 BootstrapModule 类中,它被添加到 @Module 注释的“注入”成员中。
  • 此外,这里有一段来自 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 的“查找用法”按钮也无济于事(仅显示同一个类的类的用法......)

这给我留下了两种可能的解释:
1.这与注射有关,我无法理解。
2. 完全是别的东西,我完全错过了。

4

1 回答 1

2

在翻遍了项目中的每个类之后,又花了几个小时在 traceview 上,我在 Android Bootstrap Google Group 上找到了这个。

Bootstrap 使用 Android 内置的身份验证框架,这意味着在应用程序中定义了一个服务,用于检查是否有保存的 API 密钥或登录详细信息,如果没有,则启动登录活动。

总而言之,这是一个很好的列表,部分描述了身份验证生命周期:

1.登录Activity是从一个Intent调用BootStrapAccountAuthenticator类的addAccount方法(扩展了AbstractAccountAuthenticator类)

2.将BootStrapAccountAuthenticator添加到AccountAuthenticatorSerivce中,onBind()时返回authenticator;被调用(服务有一个意图过滤器android.accounts.AccountAuthenticator

4.另一个类,称为ApiKeyProvider,调用AccountManager.getAuthTokenByFeatures(),然后绑定到AccountAuthenticatorSerivce) 并返回它得到的密钥。

5.BootstrapServiceProvider在其getService()中返回;方法使用 ApiKeyProvider 检索的密钥创建新的 BootstrapService(BootstrapService 是使用 kensawis​​ki 的 http-request 库实现 HTTP 请求的 POJO)。

6.每个fragment类(本例共3个)调用BootstrapServiceProvider.getService();onCreateLoader 方法中的方法。

而已。

关于 dagger 的使用,一切都是追溯注入的,从 Fragment 本身到包括 AccountManager 在内。我认为这可以允许相对模块化的代码(例如,您可以将 ApiKeyProvider 换成不同的)。

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

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

于 2013-06-22T01:34:41.720 回答