类扩展Android项目库中的应用程序?

wuf*_*foo 6 android

我有我已经变成了一个Android项目库,以便在另一个类似的项目重新使用一些代码的项目(在Eclipse).因为我收到了错误,但我认为自己已经开枪了.

Unable to start activity ComponentInfo{com.test.scroller1/com.lib.scrolltest.ScrollTestActivity}: java.lang.ClassCastException: android.app.Application cannot be cast to com.lib.scrolltest.resAppVars
Run Code Online (Sandbox Code Playgroud)

com.lib.scrolltest是我的项目库,它实例化一个扩展Application(resAppVars)的类.在onCreate()方法中我调用:

mRav = (resAppVars) getApplicationContext ();
Run Code Online (Sandbox Code Playgroud)

这样,我可以使用mRav对象中的方法,否则在其他类中会有很多重复的代码(例如将查询传递给返回结果的ArrayList的泛型select语句).

这有什么问题?看来我在实现Application类的方式上遇到了限制.

Tre*_*hns 4

调用 getApplicationContext() 返回当前应用程序的ApplicationonCreate()对象(即拥有正在其中运行的活动的应用程序)。

除非您正在做一些奇怪的事情,否则您无法选择使用哪个应用程序类。应用程序的文档中甚至有一条注释说不要这样做:

通常不需要子类化应用程序。在大多数情况下,静态单例可以以更加模块化的方式提供相同的功能。如果您的单例需要全局上下文(例如注册广播接收器),则可以为检索它的函数提供一个 Context,该 Context 在首次构造单例时在内部使用 Context.getApplicationContext() 。

您应该在库项目中创建一个常规共享类。或者,如果您不需要库项目提供的特殊功能,您也可以只使用常规 .jar 文件。

如果您需要共享状态,只需将其设置为单例即可。;)

  • 事实证明,静态变量(单例)存在一些分歧。有人说好,有人说不好。正如 Igor 提到的,Android 文档确实建议使用静态。对于那些刚接触 Android 开发的人来说,请注意静态变量通常不受欢迎,因为它们可以在应用程序内的任何地方进行修改。这个概念完全打破了模块化编程设计,并且几乎总是导致维护难题。 (2认同)