我尝试使用 Asynctask 在 Android 中进行网络连接,无论成功与否。
我比较好奇的是:Asynctask 有必要做内部类吗?
我没有将它作为内部类的一种形式,但 Google API 指南说 AsyncTask 必须被子类化才能使用。
(但我没有,它有效...)- http://developer.android.com/reference/android/os/AsyncTask.html
为什么 Asynctask 采用类的形式,即使它只执行一个主要功能? (我觉得应该是方法,而不是类。)
最佳答案
'AsyncTask must be subclassed to be used' 并不意味着内部类;这意味着该类扩展了 AsyncTask。
通常人们避免将 ASyncTask 用作(非静态)内部类,因为有一个大而微妙的问题是这样的:
- 您将 Asynctask 创建为 Activity 的内部类,但它正在做一些耗时的事情。根据定义,内部类持有对其“外部”父级的引用(这是它们访问父级数据的方式)。
- Android 关闭 Activity 并重新启动一个新的 Activity(例如,当您旋转手机时)。
- 现在旧 Activity 及其所有资源仍在保留中,因为 Asynctask 仍在运行并保留对旧 Activity 的引用;所以突然间你正在为旧版本的 Activity 和新版本的 Activity 使用内存。
通过使用静态内部类(不能引用它的外部父类)或不同的类并且仅使用 weak_reference 来引用 Activity ,最容易解决这个困难。
关于java - 安卓异步任务 : Is inner class necessary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958210/