2015-06-28 40 views
2

the wonderful article通過切特·哈澤我看這個建議,我覺得很重要:從Application對象中取出網絡請求的好方法?

從未使你的應用程序對象的網絡請求。該對象 可能會在應用程序的某個服務或BroadcastReceivers爲 時啓動;擊中網絡將把在特定頻率執行本地更新 的代碼轉換爲常規DDoS。

我工作的應用程序目前遵循以下(不良)做法:它在Application.onCreate()中執行用戶登錄 - 當然在後臺線程中,但仍然如此。這是一項要求:在任何活動執行任何其他任務之前,用戶需要先登錄,這通常取決於登錄用戶。我目前使用RxJava來完成這一任務,任何活動任務可觀察者都可以平滑地映射到userlogin事件上,並且工作起來相當不錯。

因此,如果我應該從Application中取出登錄任務,它應該去哪裏?起初,我認爲使用ActivityLifecycleCallbacks並觀察要創建的第一個活動會很好。但是這個回調(onActivityCreated)將在創建後調用,這對我來說已經太晚了。

所以,我認爲這應該建立一些BaseActivity類,並把登錄和其它的初始化調用在它的第一onCreate()來完成。但我不覺得這太好,因爲我在活動課中混合了一些應用程序範圍的邏輯,它很臭...

任何我可以錯過的東西?

回答

1

SplashActivity

啓動應用程序的活動。它檢查資源的可用性,並在需要時獲取它們。它還會檢查是否有一個活動的用戶會話,如果沒有執行日誌中,如果有記憶憑據,或者用戶在登錄重定向/註冊屏幕

BaseActivity

的活動是特定於您的應用程序的,並且包含適用於應用程序中所有活動的初始化和生命週期回調代碼。

+0

那麼這樣我就開始了2個活動? SplashActivity,然後是MainActivity。我想我可以禁用轉換動畫,這看起來像一個活動 – dimsuz

+0

如果你要在SplashActivity中做的唯一事情是檢查用戶會話,那麼使用SplashActivity沒有意義,但在你的MainActivity中這樣做(或BaseActivity MainActivity從onResume擴展而來)。如果您有長時間運行(1-5秒)的操作來獲取和創建資源(文件,位圖等),並且想要顯示加載器或加載映像,則使用SplashActivity。 –

+0

事情是,應用程序可以有幾個活動,Android可以通過啓動**任何**活動,而不僅僅是MainActivity來從最近恢復應用程序。在每種情況下,我都需要在開始時登錄一個用戶。所以唯一的好地方似乎就是BaseActivity,但這也是我得出的結論,我想知道這是否是唯一的。感覺不好(請參閱問題) – dimsuz