2013-06-20 72 views
0

過去三年來,我在Android上進行過「開/關」會話,用可描述爲"Big ball of mud"的應用程序進行高潮。找不到登錄活動

爲了避免這種諷刺,我決定使用Android Bootstarp作爲擴展的基礎和良好工作習慣的指導。我認爲我設法掌握了匕首背後的基本邏輯(用於在整個應用程序中注入模塊和類),但是看起來很愚蠢,我似乎無法掌握匕首的方式/位置或時間登錄活動被稱爲:

  • 的「家」活動(具有分配的發射器/家庭意圖過濾器)被稱爲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的「查找使用情況」按鈕也沒有幫助(顯示類只用同一類的用法...)

這給我留下了兩個可能的解釋:
這與注射有關,我不明白。
2.其他完全沒有,我完全錯過了。

回答

2

經過幾乎所有課程的翻譯,還有幾個小時花在traceview上,我在Android Bootstrap Google Group上找到了this

Bootstrap使用Android內置的身份驗證框架,這意味着應用程序中定義了一項服務,用於檢查是否存儲了API密鑰或登錄詳細信息,如果沒有,則會啓動登錄活動。

所以總結起來,這裏是一個不錯的清單部分描述認證生命週期:

1.登錄活動是從意圖BootStrapAccountAuthenticator類addAccount方法(它擴展了AbstractAccountAuthenticator類)稱爲

2.將BootStrapAccountAuthenticator添加到AccountAuthenticatorServce中,當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。 我認爲這可能允許相對模塊化的代碼(例如,您可以用另一個換出ApiKeyProvider)。

我希望這可以遠遠清楚,甚至可能對任何人有所幫助。

我稍後可能會回來並「重構」此答案...