[英]Android Asynctask: Is inner class necessary?
我嘗試使用Asynctask在Android中進行網絡連接,並且成功與否。
我很好奇:是否有必要使Asynctask內部類?
我沒有把它作為內部類的一種形式,但Google API指南說AsyncTask must be subclassed to be used.
(但我沒有,它的工作原理......) - http://developer.android.com/reference/android/os/AsyncTask.html
為什么Asynctask采用一種形式的類,即使它只執行一個主函數? (我認為它應該是一種方法,而不是一種類。)
'AsyncTask必須被子類化才能使用'並不意味着內部類; 它意味着該類擴展了AsyncTask。
通常人們使用ASyncTask作為(非靜態)內部類來避免因為存在一個大而微妙的問題,如下所示:
通過使用靜態內部類(不能引用它的外部父級)或不同的類並且僅使用weak_reference引用活動,可以最容易地解決這個難題。
它不一定是內部類,它取決於你使用它的內容。
例如,如果你有一個AsyncTask作為內部類,只有持有它的類可以使用它,但你有一個很多類正在使用的AsyncTask,你可能想把AsyncTask作為公共類,所以每個人都可以使用它。
它可以在兩個方面工作。
我很好奇:是否有必要使Asynctask內部類?
不,你可以將它放到外部java文件中,或者你也可以將它作為內部靜態類。
必須將AsyncTask子類化才能使用。
它與類是內在的無關,它說你需要創建一個AsyncTask的子類,即:
class MyAsyncTask extends AsyncTask
內部類看起來像這樣:
class MyActivity extends Activity {
// now MyAsyncTask is inner to MyActivity and has full access to its instance
class MyAsyncTask extends AsyncTask
{}
}
為什么Asynctask采用一種形式的類,即使它只執行一個主函數? (我認為它應該是一種方法,而不是一種類。)
它執行了很多,比如onPostExecute,onPreExecute,看得更近。 它還解耦了AsyncTask邏輯並允許重用。
如果你想讓AsyncTask成為內在的,那么我建議讓它成為靜態 - 但是為什么不把它變成外部類。 內部類總是保持對它的外部類的引用,這種方式在這種情況下,Activity不會被垃圾收集,直到AsyncTask完成它的工作(線程結束),因為網絡通信需要時間,這可能會導致問題 - 比如泄漏引用或OOM(Out Of內存)異常,如果您的活動使用大量內存。 最好繼續引用WeakReference中的Activity,以允許Activity被收集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.