我知道這是被問了很多次的問題。然而,我從來沒有找到答案。所以希望有人能給我一些啓示。Android AsyncTask vs Thread + Handler vs rxjava
我們都知道AsyncTask和Thread是執行後臺任務以避免ANR問題的選項。建議asynctask只能用於短時間運行的任務,而線程可用於長時間運行的任務。 asynctask不應該用於長時間任務的原因衆所周知,這是由於asynctask可能導致的泄漏,因爲它可能會在某個活動被破壞後繼續運行。這是令人信服的。但是,它也會導致一些其他問題:
- 線程是否也獨立於活動生命週期?因此,asynctask的風險也可以應用於線程。那麼爲什麼線程適合長時間運行的任務呢?
- 看起來asynctask的風險只適用於與活動一起使用。如果我們在服務中使用它(不是IntentService,因爲IntentService在其工作完成後停止),並且只要我們可以保證在服務停止時取消asyntask,我們可以將它用於長時間運行的任務嗎?這是不是意味着在服務中使用asynctask是無風險的?
- 我玩過rxjava一段時間,真的很喜歡它。它消除了對線程操作的擔心(除非你必須決定在哪個線程中訂閱和觀察發送的數據)。從我所看到的,rxjava(與其他一些libs一起,如retrofits)似乎是asynctask和thread的完美替代品。我想知道我們是否可以完全忘記它們,或者有任何特定情況下rxjava無法實現asynctask和thread可以做的事情,我應該知道的是什麼?
感謝
感謝您的回答。那麼它意味着總是使用rxjava而不是Asynctask和Thread?你能否在答案中「仔細」澄清你的意思?謝謝 –