java - 安卓异步任务 : Is inner class necessary?

标签 java android android-asynctask

我尝试使用 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 用作(非静态)内部类,因为有一个大而微妙的问题是这样的:

  1. 您将 Asynctask 创建为 Activity 的内部类,但它正在做一些耗时的事情。根据定义,内部类持有对其“外部”父级的引用(这是它们访问父级数据的方式)。
  2. Android 关闭 Activity 并重新启动一个新的 Activity(例如,当您旋转手机时)。
  3. 现在旧 Activity 及其所有资源仍在保留中,因为 Asynctask 仍在运行并保留对旧 Activity 的引用;所以突然间你正在为旧版本的 Activity 和新版本的 Activity 使用内存。

通过使用静态内部类(不能引用它的外部父类)或不同的类并且仅使用 weak_reference 来引用 Activity ,最容易解决这个困难。

关于java - 安卓异步任务 : Is inner class necessary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27958210/

相关文章:

java - 我正在尝试检查网站状态是否在线

java - 每次应用程序重新启动时都会重新创建 SQLite 数据库表

android - 使用异步任务加载图像时 Android ListView 中的奇怪行为

java - 如何从 Android 中的 MainActivity 调用静态方法中的内容

java - 选择 LAST_INSERT_ID()

java - 如何使用 Java 测试与 Oracle 数据库的连接

java - 将通用代码应用于 jbutton 组

android - 使用 Mockito 1.9.5 和 DexMaker-Mockito-1.0 的验证错误

java - 我不能选择我创建的其他单选按钮?

java - 显示启动画面时如何在后台加载 webview 中的 url?