[英]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.