Android Asynctask:内部类是否必要?

soo*_*noo 5 java android android-asynctask

我尝试使用Asynctask在Android中进行网络连接,并且成功与否.

我很好奇:是否有必要制作Asynctask内部类?

我没有把它作为内部类的一种形式,但谷歌API指南说AsyncTask must be subclassed to be used.(但我没有,它的工作......) - http://developer.android.com/reference/android/os/AsyncTask. HTML

为什么Asynctask采用一种形式的类,即使它只执行一个主函数?(我认为它应该是一种方法,而不是一种类.)

Ele*_*tal 17

'AsyncTask必须被子类化才能使用'并不意味着内部类; 它意味着该类扩展了AsyncTask.

通常人们使用ASyncTask作为(非静态)内部类来避免因为存在一个大而微妙的问题,如下所示:

  1. 您将Asynctask创建为您的活动的内部类,并且不需要花费很多时间.根据定义,内部类包含对其"外部"父级的引用(这是它们访问父级数据的方式).
  2. Android会关闭活动并重新启动新活动(例如,当您旋转手机时).
  3. 现在旧的活动及其所有资源仍然被保留,因为Asynctask仍在运行并且持有对旧活动的引用; 突然之间,您正在为旧版本的活动和新版本的活动使用内存.

通过使用静态内部类(不能引用它的外部父级)或不同的类并且仅使用weak_reference引用活动,可以最容易地解决这个难题.


Ofe*_*mon 4

它不一定是内部类,这取决于您使用它的用途。

例如,如果您有一个 AsyncTask 作为内部类,则只有持有它的类可以使用它,但是您有一个很多类正在使用的 AsyncTask,您可能希望将 AsyncTask 作为公共类,以便每个人都可以使用它。

它可以以两种方式发挥作用。