AsyncTaskLoader是否真的从AsyncTaskLoader继承?

时间:2014-05-15 19:18:47

标签: java inheritance android-asynctask android-studio asynctaskloader

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

enter image description here

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

更新

我的坏;我读了" Ctrl + N"在它真正说的小费中," Ctrl + H"。以下是你对后者的看法:

enter image description here

(虽然还不仅仅是我的预期)

1 个答案:

答案 0 :(得分:2)

准确回答这个问题需要了解更多关于你的项目的信息(大概是hhs.app)。但是,Drodio的层次结构确实发现了PersistHistoryAsyncTask,这是ActivityChooserModel的私有内部类,由于是私有类而未在Android文档中列出,所以我对 no的观点在我的原始响应(下面)中继承自AsyncTask的android库中的类是不正确的。

假设RESTfulActivitySQLiteActivityMainActivityDeliveryItemActivity中列出的内部类都延伸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

前者是:

  

Abstract Loader,提供AsyncTask来完成工作。

后者是:

  

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

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

您可以在grepcode.com上看到这两个类的来源:

这两个课程都没有以我能看到的任何方式与另一个课程相结合。支持版本导入android.content.Context,但Context在自己的包中不对AsyncTaskLoader执行任何操作。

所有这一切,似乎并没有发布Drodio的功能,你发布的截图根本就是继承树。相反,它是一个类搜索。您已突出显示AsyncTask,搜索结果显示其他3个以" AsyncTask"开头的类,以#34; AsyncTask"结尾的2个类,以及从使用" Async"以"任务"结束(除了实际的AsyncTask类之外的所有内容)。考虑AsyncTask不会继承这些类的任何AsyncTask不会扩展或实现任何内容),这些类中的任何一个都不会继承自AsyncTask (在android.*中没有扩展AsyncTask的类),很明显Drodio的这个特性与继承无关。

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