2017-03-15 44 views

回答

3

爲什麼一定要AsyncTask的方法調用execute(Params...) UI線程上的文檔中所述,即使在的AsyncTask使用internalHandler Looper.getMainLooper()?

爲什麼可以是一個哲學問題,有時...我檢查AsyncTask代碼爲Android API 25和代碼本身並沒有給我們一個明確的答案。只有開發這個類的人知道原因。

但是,代碼告訴我們的是它可以將來自後臺線程的調用轉發到UI線程,但它不會。所以開發者沒有專業知識去做,或者懶惰,或者想要執行一個模式,或者其他什麼。

我試着創建任務,並從後臺線程調用它的執行(參數...),它工作正常。

注意它的工作原理,但不能保證總能正常工作。多線程編程相當棘手,其調試可能是地獄。

在代碼檢查中,我注意到onPreExecute()調用是在調用execute(Params...)的同一個線程中完成的。因此,如果您在後臺線程中調用execute(Params...),它將打破onPreExecute()在UI線程上運行的不變量。

+0

我真的很感激,如果downvoter表達他或她的動機在評論 – nandsito

+0

我upvoted這個答案,特別是最後一部分是相當好的答案的問題。 – Endzeit

相關問題