如果您在 Drodio (Android Studio) 中突出显示一个类并按下 Ctrl+N,它将显示该类的继承层次结构,就像 AsyncTask 一样:
这好像表明AsyncTaskLoader继承自AsyncTaskLoader?是这样吗?如果是这样,那是故意的吗?或者这里发生了什么?
更新
我的错;我在提示中读到“Ctrl+N”,它实际上说的是“Ctrl+H”。以下是后者的效果:
(尽管仍然不符合我的预期)
最佳答案
准确回答这个问题需要更多地了解您的项目(大概是 hhs.app)。然而,Drodio 的层级确实发现了 PersistHistoryAsyncTask
,这是 ActivityChooserModel
的私有(private)内部类,由于是私有(private)类而没有在 Android 文档中列出,所以我的观点是该 android 库中没有继承自 AsyncTask
的类。我原来的回复(如下)是不正确的。
假设 RESTfulActivity
中列出了内部类, SQLiteActivity
, MainActivity
,和DeliveryItemActivity
全部延伸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.AsyncTaskLoader
和android.support.v4.content.AsyncTaskLoader
.
前者是:
Abstract Loader that provides an
AsyncTask
to do the work.
后者是:
Static library support version of the framework's
AsyncTaskLoader
. Used to write apps that run on platforms prior to Android 3.0.
两者AsyncTaskLoader
类继承自名为 Loader
的类在同一个包中,两个 Loader
类继承自 Object
。相关类均未实现任何接口(interface)。
您可以在 grepcode.com 上查看这两个类的源代码:
据我所知,这两个类都没有以任何方式与另一个类耦合。支持版本导入android.content.Context
,但是Context
对 AsyncTaskLoader
没有做任何事情在它自己的包中。
综上所述,您发布的屏幕截图中的 Drodio 功能似乎根本不打算成为继承树。相反,这是一个类别搜索。您已突出显示 AsyncTask
,搜索结果显示另外 3 个以“AsyncTask”开头的类,2 个以“AsyncTask”结尾的类,以及 1 个以“Async”开头并以“Task”结尾的类(除了实际的 AsyncTask
之外的所有这些)。类(class))。考虑AsyncTask
不继承这些类中的任何一个( AsyncTask
不扩展或实现任何内容),也不继承任何这些类 AsyncTask
(在 android.*
中没有扩展 AsyncTask
的类),很明显 Drodio 的这个功能与继承无关。
事实上,Driodo 没有显示您自己的 AsyncTask
的具体实现似乎是棺材上的最后一颗钉子,特别是因为您的光标位于定义子类的那一行。 (虽然并非所有 IDE 都可以将用户定义的函数合并到文档弹出窗口中,但大多数至少能够处理同一文件中的内容。)
关于java - AsyncTaskLoader真的继承自AsyncTaskLoader吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686881/