在the wonderful article通過切特·哈澤我看這個建議,我覺得很重要:從Application對象中取出網絡請求的好方法?
從未使你的應用程序對象的網絡請求。該對象 可能會在應用程序的某個服務或BroadcastReceivers爲 時啓動;擊中網絡將把在特定頻率執行本地更新 的代碼轉換爲常規DDoS。
我工作的應用程序目前遵循以下(不良)做法:它在Application.onCreate()
中執行用戶登錄 - 當然在後臺線程中,但仍然如此。這是一項要求:在任何活動執行任何其他任務之前,用戶需要先登錄,這通常取決於登錄用戶。我目前使用RxJava來完成這一任務,任何活動任務可觀察者都可以平滑地映射到userlogin事件上,並且工作起來相當不錯。
因此,如果我應該從Application
中取出登錄任務,它應該去哪裏?起初,我認爲使用ActivityLifecycleCallbacks
並觀察要創建的第一個活動會很好。但是這個回調(onActivityCreated
)將在創建後調用,這對我來說已經太晚了。
所以,我認爲這應該建立一些BaseActivity
類,並把登錄和其它的初始化調用在它的第一onCreate()
來完成。但我不覺得這太好,因爲我在活動課中混合了一些應用程序範圍的邏輯,它很臭...
任何我可以錯過的東西?
那麼這樣我就開始了2個活動? SplashActivity,然後是MainActivity。我想我可以禁用轉換動畫,這看起來像一個活動 – dimsuz
如果你要在SplashActivity中做的唯一事情是檢查用戶會話,那麼使用SplashActivity沒有意義,但在你的MainActivity中這樣做(或BaseActivity MainActivity從onResume擴展而來)。如果您有長時間運行(1-5秒)的操作來獲取和創建資源(文件,位圖等),並且想要顯示加載器或加載映像,則使用SplashActivity。 –
事情是,應用程序可以有幾個活動,Android可以通過啓動**任何**活動,而不僅僅是MainActivity來從最近恢復應用程序。在每種情況下,我都需要在開始時登錄一個用戶。所以唯一的好地方似乎就是BaseActivity,但這也是我得出的結論,我想知道這是否是唯一的。感覺不好(請參閱問題) – dimsuz