1

如果您在 Drodio (Android Studio) 中突出显示一个类并混合 Ctrl+N,它将显示该类的继承层次结构,就像 AsyncTask 一样:

在此处输入图像描述

这似乎表明 AsyncTaskLoader 继承自 AsyncTaskLoader?是这样吗?如果是这样,那是故意的吗?或者这里发生了什么?

更新

我的错; 我在提示中读到了“Ctrl+N”,它真正说的是“Ctrl+H”。这是您使用后者得到的结果:

在此处输入图像描述

(虽然仍然不是我所期望的)

4

1 回答 1

2

准确回答这个问题需要更多地了解您的项目(大概是 hhs.app)。但是,Drodio 的层次结构确实发现了PersistHistoryAsyncTask,它是 的私有内部类ActivityChooserModel,由于是私有类,因此未在 Android 文档中列出,因此我在该 android 库中没有继承自AsyncTask原始响应(如下)的类的观点是不正确的。

RESTfulActivity假设, SQLiteActivity,MainActivityDeliveryItemActivity所有扩展中列出的内部类AsyncTask,您的第二个屏幕截图中的结果完全符合预期。AsyncTask不继承任何东西(Object显然除了 ),并且您有 9 个类扩展AsyncTask. 所以,你有一个非常简单的层次结构:

java.lang.Object
  |
  +-- android.os.AsyncTask
        |
        +-- hhs.app.RESTfulActivity.PostDeliveryItemTask
        |
        +-- hhs.app.SQLiteActivity.FetchAndPopTask
        |
        +-- hhs.app.MainActivity.GetVendorsTask
        |
        +-- hhs.app.DeliveryItemActivity.PostDeliveryItemTask
        |
        +-- etc...

原答案:

您正在查看两个不同的类:android.content.AsyncTaskLoaderandroid.support.v4.content.AsyncTaskLoader.

前者是:

提供工作的抽象加载器AsyncTask

后者是:

框架的静态库支持版本AsyncTaskLoader。用于编写在 Android 3.0 之前的平台上运行的应用程序。

两个AsyncTaskLoader类都继承自Loader同一个包中命名的类,并且这两个Loader类继承自Object. 所讨论的类都没有实现任何接口。

您可以在 grepcode.com 上查看这两个类的源代码:

在我看来,这两个类都没有以任何方式与另一个类耦合。支持版本 imports android.content.Context,但ContextAsyncTaskLoader对它自己的包中的 做任何事情。

尽管如此,您发布的 Drodio 的屏幕截图似乎根本不是为了成为继承树。相反,它是一个类搜索。您已突出显示AsyncTask,搜索结果显示其他 3 个以“AsyncTask”开头的类、2 个以“AsyncTask”结尾的类和 1 个以“Async”开头并以“Task”结尾的类(除了实际AsyncTask班级)。考虑到AsyncTask不从这些类中的任何AsyncTask一个继承(不扩展或实现任何东西),也不从这些类中的任何一个继承AsyncTask(在android.*没有扩展的类中AsyncTask),显然 Drodio 的这个特性与继承无关.

Driodo 没有显示您自己的具体实现这一事实AsyncTask似乎是棺材上的最后一颗钉子,特别是因为您的光标位于定义子类的那一行。(虽然并非所有 IDE 都可以将用户定义的函数合并到文档弹出窗口中,但大多数 IDE至少能够处理同一个文件中的内容。)

于 2014-05-15T20:00:03.347 回答