我面临着内存不足的问题。 Low memory:no more background process
这就是情景。
我正在使用一个从字符串数组中获取数据的列表,它具有自定义背景,单击项目,列表获取另一个字符串数组以显示为第二级或第三级。用数据库写的三个级别的信息。
在第三级之后,还有两个级别可以从Web服务中获取数据,
这会导致内存不足错误。
如何摆脱解决方案?
编辑 在进行了一些挖掘之后,我发现GC正在尝试(终止或)重启,以防它已经崩溃com.android.inputmethod.latin/.latinIME
服务。一个值得注意的一点是,该应用程序是用法语和意大利语翻译的,但是这个屏幕没有任何翻译文本,这些信息有帮助吗?
编辑2:在对traceview进行详细研究后,我发现所有文本视图都在其中应用了自定义字体。 (调用TypeFace.createFromAsset())IMO导致崩溃。
问题在于我必须保留字体....
可以避免崩溃并且有字体吗?(因为我认为答案是否定的:但仍在等待一些意见)
编辑3 :删除自定义字体后,应用程序的性能会更好。因此,我可以怀疑字体是这里唯一的罪魁祸首。这就是我编辑问题的原因。我使用的字体是helvetica。
使用外部字体会导致应用程序崩溃或内存不足吗?如果是,你可以更详细地描述原因吗?
由于
答案 0 :(得分:11)
如果您使用的代码类似于:
Typeface font = Typeface.createFromAsset(getContext().getAssets(),
"fonts/Helvetica.ttf");
尝试将“font”设为全局变量,以便只加载一次。否则可以反复加载,快速消耗内存。 See this message了解更多细节
答案 1 :(得分:0)
嗯,回答问题有点不清楚:
Cursor
的对象获取数据的。 Cursor
是非常耗费内存的对象,所以最好不要只关闭Cursor
,而且还应该调用Cursor.deactivate()