2011-12-28 91 views
4

我有一个类扩展了应用程序在Android tabHost应用程序。在App类中,我一直在放置方法和变量,否则我需要在每个类中重新创建这些方法和变量。一种方法是从数据库读取数据并将结果存储在ArrayList中(例如名字,姓氏)。而不是重新读这个数据库,并重新创建每个需要信息的标签视图的代码,我坚持方法和ArrayList在扩展应用程序(myAppClass)的类。这样,通过在onCreate()中的任何选项卡视图中设置mAC = (myAppClass) getApplicationContext(),我可以引用myAppClass中的所有get ..()和set ..()方法。静态方法与类扩展android.app.Application?

我原来的计划是使用静态方法和变量的共享类,但我读了很多“不这样做”的线程,所以决定去应用程序路线。现在,我遇到了一种情况,我试图在项目库中使用myAppClass,但得到关于android.app.Application cannot be cast to...的错误如果我将myAppClass更改回静态方法/变量(并且不扩展应用程序),事情就会起作用,但这应该是假定的是一个很大的禁忌。有没有另一种方法来做到这一点?不确定Android是否通过引用传递了所有内容,但是我最好通过在方法/类之间来回传递巨大(数千个对象/成员)ArrayLists来重新实现整个应用程序?

+0

只有一个应用程序实例。不需要使用getter和setter。只需在子类应用程序中使用静态方法/变量并以这种方式使用它们:MyApplication.myMethod()... – 2011-12-28 17:01:49

回答

6

我原来的计划是使用静态方法和变量的共享类,但我读了很多“不这样做”的线程,所以决定去应用程序的路线。

“不这样做”通常是针对全球范围内任何事物的推荐,因此将覆盖静态数据成员以及自定义Application。两者都可能是内存泄漏的来源。

现在,我碰到的情况下,我尝试使用myAppClass在一个项目库,但得到的误差约android.app.Application不能转换为...

你主机项目中的清单可能并未声明使用库的Application实现。

这应该是一个很大的禁忌

同样,静态数据成员不超过自定义Application糟糕的是,在很多情况下是较好的。

是否有其他方法可以做到这一点?

请勿使用Application或静态数据成员。

通过在方法/类之间来回传递巨大(数千个对象/成员)ArrayLists来重新实现整个应用程序会更好吗?

你最好拥有一个持久的数据模型,比如数据库。使用静态数据成员作为持久数据模型的缓存是可以的,只要你非常小心你的内存管理。

+0

感谢您的回复。你用AndroidManifest钉住了它。用静态的ArrayList对象管理内存需要做什么不同?应用程序结束时不清除Android? – wufoo 2011-12-28 18:51:31

+0

@wufoo:“应用程序结束时不清除Android?” - 当进程最终被终止时,内存将被清理,但之前的内存泄漏仍然会导致应用程序因堆空间用尽而崩溃。 – CommonsWare 2011-12-28 20:01:44

+1

谢谢。 Eclipse Memory Analyzer是查找泄漏的好工具吗? 2yr旧线程在这里:http://stackoverflow.com/questions/1147172/what-android-tools-and-methods-work-best-to-find-memory-resource-leaks – wufoo 2011-12-28 22:01:07