问题标签 [android-memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
310 浏览

android - android - 覆盖大对象时RAM消耗增加

致反对者:我没有粘贴任何代码,因为我的问题很笼统,一旦有人提出要求,我就会发布一些代码。

在我的应用程序中,我在 Activity 启动时以相当大的形式加载用户的播放列表JSONArray,解析并以ListView. 如果用户按下更新按钮,整个操作会重复,相同的对象会被覆盖。我注意到应用程序使用的 RAM 量在每次更新时随机增加 0.4 到 1 MB。我试图找出原因,相同的内存地址只是被新数据覆盖,为什么 RAM 消耗会增加?我还尝试null在进行更新之前将所有使用的对象设置为,这减少了使用的 RAM 量,但仅减少了大约 100KB。

我对这个问题没有任何解释,因为有相同的变量会被覆盖。服务器响应的大小没有改变。 任何想法如何解决此内存泄漏?

0 投票
1 回答
602 浏览

android - 使用 MediaPlayer 后释放消耗的内存

我正在开发一个包含 100 种音效的应用程序。播放一些声音后,应用力关闭。我知道问题将消耗内存的所有可用空间。我尝试使用 Release() 方法,但在调用此方法后,我无法再次播放声音。我还尝试使用 onDestroy() 方法将媒体播放器的对象设置为 null,但由于这些对象必须是最终的,我不能这样做。你的建议是什么?这是我的代码:

0 投票
2 回答
2015 浏览

android - 允许在 Android Drawables 中针对各种密度自动缩放?

很多关于 Android 开发的博客和最佳实践说

您不需要为每种可能的密度提供位图,Android 会缩放您的位图(通常在加载时)以匹配当前密度。”

参考链接: https: //plus.google.com/105051985738280261832/posts/6eWwQvFGLV8

我试过了,效果很好。但我无法理解一件事。

例如,我在视图寻呼机中创建了一个示例应用程序,其中包含 5 个大约 1.5 MB 的全屏图像。

我为 Galaxy Tab 2 等 7 英寸 MDPI 设备创建了重图像,并将它们放在“drawable-large-mdpi”文件夹中。它有点生涩,但没有崩溃,让我滚动浏览所有图像。

现在我尝试在几乎是大型 HDPI 设备的 Nexus 7 上使用该应用程序。该应用程序在解码位图时因“OOM 错误”而崩溃。

*如果我将图像从大 MDPI 移动到大 HDPI,它在两个设备上都可以正常工作而不会出现任何崩溃。*

所以我有两个问题。

  1. 这个结果是否倾向于,我们只能将图形资源放在最高密度的可绘制文件夹中,并让它在其范围内自动缩小?
  2. 内部发生了什么,为什么它第一次崩溃?
0 投票
6 回答
25334 浏览

android - 如何获得 android 应用程序的最低硬件要求

我和一些团队成员开发了一个 android 应用程序,它通过移动设备收集现场数据。

现在这个应用程序将投入生产。所以一般人都会使用这个应用程序。我们还需要编写一个文档来解释应用程序中引入的所有内容以及运行此应用程序所需的最低硬件要求而不会出错。

现在我怎么知道最低硬件要求是什么?

基本上在我的应用程序中大约有四个TextFields、三个SpinnersDatesEditTexts两个ImageViews

那么我怎么知道运行这个应用程序需要什么最低内存要求。

我已经在一个移动设备上尝试过这个应用程序,其中几乎所有的内存都被其他一些应用程序用完了。我的应用程序无法拍摄照片。当我删除一些应用程序时,我的应用程序工作正常。

这就是为什么我想知道运行我的应用程序所需的最低内存要求。

0 投票
0 回答
907 浏览

android - 如何从所有正在运行或暂停的活动中释放内存并返回已开始的活动

我整个星期都在研究 android 堆内存控制。

故事是我们将登录屏幕背景更改为更高清的内容。这造成了严重的问题。它比以前消耗更多的内存,所以其余的活动,特别是从它打开一个大图像时,会导致内存不足的问题。

用DDMS分析后,终于找到了解决办法。我在图像启动时添加了位图控件,并在用户离开活动时回收它。这是我的代码:

当用户离开或停止活动时:

通过这样做,应用程序的其余部分将在大约 40%-50% 的可用内存下运行。之前它只运行不到 10%。

然而,这并不是一个好的结局。我遇到了另一个问题。我有一个功能可以让用户注销并返回主屏幕。然而,登录屏幕本身需要大约 80% 的堆空间才能运行。在运行时(登录后),其余活动需要大约 50%-60% 才能运行。

简而言之,我只是没有足够的堆内存来从运行时再次午餐主屏幕!

这是退出和重新午餐时的代码:

我该如何改进这些代码,以释放应用程序堆的所有内存,然后从头开始重新启动主要活动?或者只有我能做的就是减少登录屏幕的内存使用(我怀疑这真的很难)。

谢谢!

0 投票
1 回答
1567 浏览

android - 低内存清理后的Android onActivityResult和onResume Lifecycle

我有两个活动:ActivityA 和 ActivityB。ActivityA 为结果启动 Activity B,并期望某个 resultCode。如果它没有得到它,则 ActivityA 完成。这个想法是关闭应用程序。

ActivityA 还有一个 onResume 方法可以做一些事情。如果 ActivityA 决定在 onActivityResult 方法中完成,我不希望完成这些事情。

这在大多数情况下都有效,除非在内存不足的情况下,android 从内存中删除 ActivityA 和 ActivityB 并重新加载它们。

例如:ActivityA 启动 ActivityB。背景应用程序。然后android会做它的内存清理。我们可以在 DDMS 中进行模拟。

  • 将应用程序带到前台。
  • 为 ActivityB 调用 onCreate()
  • 后退按钮完成 ActivityB
  • 为 ActivityA 调用 onCreate()
  • onActivityResult() 调用 ActivityA
  • 结果是取消,调用finish()
  • onResume() 调用 ActivityA
  • 在简历上做事

这最后两个步骤是不可取的。如果没有内存不足的问题,正常的工作流程如下所示:

  • 将应用程序带到前台
  • 后退按钮完成 ActivityB
  • onActivityResult() 调用 ActivityA
  • 结果是取消,调用finish()

我在运行 Gingerbread 的手机和运行 Jellybean 的 Nexus 7 上都看到了这一点。

我的第一个问题:我是否在活动生命周期中遗漏了一些明显的东西?

如果做不到这一点,这是 Android 的预期行为吗?有没有一种优雅的方法来解决这个问题,还是我必须破解一些东西,或者我应该一起尝试不同的方法?

提前致谢。如果有人需要更多信息或代码,请告诉我。

0 投票
6 回答
7362 浏览

android - Fragment 对 mActivity 的引用在方向更改后变为空。片段状态维护无效

我的应用程序由几个片段组成。到目前为止,我已经将它们的引用存储在自定义 Application 对象中,但我开始认为我做错了什么。

当我意识到我的片段对 mActivity 的所有引用在方向更改后都变为空时,我的问题就开始了。因此,当我在方向更改后调用 getActivity() 时,会引发 NullPointerException。我在调用 getActivity() 之前检查了我的片段的 onAttach() 是否被调用,但它仍然返回 null。

以下是我的 MainActivity 的剥离版本,它是我的应用程序中的唯一活动。

以下是 CustomApplication 的剥离版本。我在这个实现背后的想法是保证在我的应用程序的整个生命周期中每个片段只有一个实例。

我对如何最好地实现多个片段以及如何维护它们的状态的技巧非常感兴趣。供您参考,到目前为止,我的应用程序包含 15 个以上的片段。我做了一些研究,似乎 FragmentManager.findFragmentByTag() 是一个不错的选择,但我无法成功实现它。

我的实现似乎运行良好,除了 mActivity 引用在方向更改后变为空,这让我相信我也可能有一些内存泄漏问题。

如果您需要查看更多代码,请告诉我。我故意避免包含片段代码,因为我坚信问题与我的 Activity 和 Application 实现有关,但我可能错了。

谢谢你的时间。

0 投票
2 回答
2573 浏览

android - 使用图像 ViewPager 时出现“内存不足”错误

我是 Android 新手,我正在尝试实现一个 ViewPager 来进行图像浏览。我正在使用一个名为 UrlImageViewHelper 的库从 URL 字符串中加载图像。滚动浏览前 4-5 张图像后,我遇到了内存泄漏问题。

这是我正在使用的页面适配器代码:

非常基本的代码,但一定有我遗漏的东西吗?如果我能提供更多信息,请告诉我。谢谢大家。

UrlImageViewHelper 库中的代码:

这是 LogCat 中抛出的异常:

感谢您的关注。

0 投票
2 回答
2048 浏览

android - WebView 和 GridView 变成 ScrollView,View 太大而无法放入绘图缓存

我有一个布局内存问题。当我有一个大的 web 视图时,它不显示任何内容,并且 logcat 显示“视图太大而无法放入绘图缓存”。

布局是:

0 投票
1 回答
748 浏览

android - 以编程方式解析内存快照 hprof 索引文件

我正在尝试以编程方式分析 hprof 文件。使用 android-sdk 中的 hprof-conv 工具,我生成了一堆 com.your.package.index 文件。

如何以编程方式解析这些 .index 文件?

我想在支配树上运行一些自定义分析,这很容易通过 MAT(Eclipse 的内存分析器)手动完成,但希望以自动化方式完成。