Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android应用程序占用内存最多的是什么?_Android - Fatal编程技术网

android应用程序占用内存最多的是什么?

android应用程序占用内存最多的是什么?,android,Android,我正在尝试优化我的应用程序的内存使用。从广播接收器和服务到位图和静态变量,几乎无所不包。 我认为我的应用程序中有很多内存泄漏需要处理,但我希望它不会出现outofmemory异常 我想知道避免过多内存消耗的最佳方法是什么,我是否必须始终回收位图?因为我从来没有这样做过,用活动上下文或应用程序上下文注册广播接收器好吗?使用静态变量从一个活动到另一个活动访问数据安全吗?我应该给我活动中的每个变量指定一个空值,以便它们可以被垃圾收集,还是不必要 有很多问题,但就像这是我的第一个android应用程序一

我正在尝试优化我的应用程序的内存使用。从广播接收器和服务到位图和静态变量,几乎无所不包。 我认为我的应用程序中有很多内存泄漏需要处理,但我希望它不会出现outofmemory异常

我想知道避免过多内存消耗的最佳方法是什么,我是否必须始终回收位图?因为我从来没有这样做过,用活动上下文或应用程序上下文注册广播接收器好吗?使用静态变量从一个活动到另一个活动访问数据安全吗?我应该给我活动中的每个变量指定一个空值,以便它们可以被垃圾收集,还是不必要

有很多问题,但就像这是我的第一个android应用程序一样,代码在某些地方做得很糟糕,而且很复杂


对于一个性能卓越、制作精良的应用程序,最好的做法是什么?

我认为手册就足够了:

我认为手册就足够了:

最重要的是

如果您正在寻找内存优化,最重要的一步是检查与垃圾收集器相关的
logcat
消息。类似于:

12-01 19:12:09.138: D/dalvikvm(31828): GC_CONCURRENT freed 158K, 3% free 10259K/10503K, paused 15ms+0ms, total 19ms
第一个值是GC在此运行中释放的量,第二个值是应用程序正在使用的量,第三个值是分配给应用程序的量。最后一个值随着应用程序内存需求的增加而增加,直到分配的内存达到系统允许的最大数量,应用程序被终止。在
蜂巢
之前的SDK必须有更多的值,这是在
Dalvik Vm
之外使用的内存,通常由
位图
对象使用

因此,最重要的测试是使用应用程序一段时间,检查已使用/分配内存的值是否保持稳定或持续增加

如果它保持稳定,您的分析就完成了,您可以去喝杯咖啡:-)

它一直在增加,那么也许最好开始检查你的记忆在哪里

该做什么

使内存得到良好利用的最基本的好规则是释放(清空)任何不再需要的对象。对于大多数非静态对象,这是自动完成的,因此您应该主要关注
静态对象,确保在不需要时为它们指定null

棘手的问题

内存泄漏的最常见原因是静态对象未得到正确管理,并持有对以下对象的引用:

  • 上下文
  • 视图(其中包含对上下文的引用(也可能包含对位图的引用)
  • 线程(GC不容易收集)
  • 处理程序(保存对上下文的引用)
  • 位图(主要是在Honeycomb之前的版本中,GC在收集它们时没有那么有效)
最后一个音符

如果你能花一个小时,请观看谷歌IO 2011的视频,其中Patrick Dubroy解释了如何使用MAT识别内存泄漏:

它真的帮助我在我的应用程序中启动了内存调试


问候。

最重要的

如果您正在寻找内存优化,最重要的一步是检查与垃圾收集器相关的
logcat
消息。类似于:

12-01 19:12:09.138: D/dalvikvm(31828): GC_CONCURRENT freed 158K, 3% free 10259K/10503K, paused 15ms+0ms, total 19ms
第一个值是GC在这次运行中释放的量,第二个值是你的应用程序正在使用的量,第三个值是分配给你的应用程序的量。最后一个值随着你的应用程序对内存的需求增加而增加,直到分配的内存达到系统允许的最大量,你的应用程序被杀死。
Honeycom之前的SDK
必须有更多的值,这是在
Dalvik Vm
外部使用的内存,通常由
位图
对象使用

因此,最重要的测试是使用应用程序一段时间,检查已使用/分配内存的值是否保持稳定或持续增加

如果它保持稳定,您的分析就完成了,您可以去喝杯咖啡:-)

它一直在增加,那么也许最好开始检查你的记忆在哪里

该做什么

使内存得到良好利用的最基本的好规则是释放(清空)任何不再需要的对象。对于大多数非静态对象,这是自动完成的,因此您应该主要关注
静态对象,确保在不需要时为它们指定null

棘手的问题

内存泄漏的最常见原因是静态对象未得到正确管理,并持有对以下对象的引用:

  • 上下文
  • 视图(其中包含对上下文的引用(也可能包含对位图的引用)
  • 线程(GC不容易收集)
  • 处理程序(保存对上下文的引用)
  • 位图(主要是在Honeycomb之前的版本中,GC在收集它们时没有那么有效)
最后一个音符

如果你能花一个小时,请观看谷歌IO 2011的视频,其中Patrick Dubroy解释了如何使用MAT识别内存泄漏:

它真的帮助我在我的应用程序中启动了内存调试


注意。

只有当您知道需要优化时才进行优化。有关如何检查内存使用情况,请参阅DDMS和MAT。每个应用程序都不同……是的,您应该回收位图。这几乎是不需要动脑筋的。只有当您知道需要优化时才进行优化。有关如何检查内存使用情况,请参阅DDMS和MAT。每个应用程序都不同……并且是的,你应该回收位图。这几乎不需要动脑筋。我以前也看过那个视频,但我想我已经看完你的答案了。内存管理太烦人了=((可能很烦人,但也可能是挑战性的。我的一个线程内存泄漏,让我彻夜未眠:-)我忘了提到,旋转设备(销毁并重新创建应用程序)有助于暴露内存