在每一个我的应用程序的活动,所有视图(网格/列表/按钮......很多很多)被声明为活动的静态成员。 这是很好的做法还是有更好的办法。 一直在努力,现在推测这一个月,终于决定去向。 任何帮助表示赞赏!
Answer 1:
http://developer.android.com/training/articles/perf-tips.html 。 检查文件,以了解什么时候使用静态变量。
我同意粗硬的评论。 为什么你需要你的UI元素是静态的。
不推荐使用静态变量。 静态变量被存储在堆的一个PermGen的部分。 即使类完成它的工作静态变量停留在堆。 垃圾回收器标记和清除。 如果你有其中在第二活动中引用的第一个活动一个静态变量,链接保持长久。 如果你使用更多的静态变量你可能会内存泄漏。 还可以减少使用不必要的对象。
通过类对象引用静态变量,其被引用的类装入器-SO除非是莫名其妙的ClassLoader滴类或类加载器本身就符合垃圾收集的静态变量将不会被垃圾收集。 所以,如果你使用的是在许多类引用这些类以及其中静态变量的声明不能被垃圾收集,除非这些类可用于垃圾收集的一个静态变量。 因此,这将导致堆内存扩展,导致内存泄漏。
在这个视频的人谈到为什么不应该被使用,以及如何静态变量,以避免内存泄漏。 http://www.youtube.com/watch?v=_CruQY55HOk 。 这家伙谈论使用MAT分析仪来检查内存泄漏。
也看看这个链接。 http://developer.android.com/guide/faq/framework.html.Have看看细节的标题下*我如何通过一个单一的应用程序/服务活动之间的数据?
Answer 2:
这两个连接给你的问题的答案:
一
二
还应用性能细节。
Answer 3:
个人而言,我会避免使用静态变量,这些变量保存记忆中,尽管该活动可能不再需要它们。
UI组件并不真正需要的是静态的,因为他们应该从的onCreate使用findViewById进行检索,或在OnCreate编程创建,并没有必要永久保存的变量。
Answer 4:
你不应该符合您的视图变量在你的Activity类是static
,因为一个静态变量是类,而不是为你的活动实例:
Public MyActivity extends Activity {
private static final string TAG = MyActivity.class.getSimpleName(); // This is a good candidate for `static`.
private static Switch myFirstSwitch; // This is a bad candidate for `static`
private Switch mySecondSwitch; // This is good, and can be accessed by onCreate(), onResume(), etc.
// …
}
如果您有没有遇到过问题,到目前为止,在使用myFirstSwitch
,这是因为在实践中的Android实例化一个MyActivity
解析文件时实例AndroidManifest.xml
。 因此,在应用层面有使用之间没有显著差异static
变量,不使用它们,但在内部静态变量有不同的处理。
然而,在理论上,那么你可以MyActivity
自己在代码中多次。 例如,由于某些原因或只是为了测试目的,你可以写的地方MyActivity testActivity = new MyActivity();
在这种情况下,你可能会使用有麻烦static
myFirstSwitch
变量。