在三星Galaxy S3上运行,其中ActivityManager.getMemoryClass()返回一个健康的64(MB)允许堆空间,我收到许多这样的LogCat消息。
WAIT_FOR_CONCURRENT_GC阻止0ms
GC_EXPLICIT释放267K,35%免费15885 / 24327K,暂停3ms + 6ms,总计52ms
应用程序在内存中加载大约100个联系人缩略图的缓存,并且在联系人/位图加载期间发生这些GC调用。滚动列表视图时,GC调用的结果是干扰性能。
我从不打电话给System.gc()
。
我的问题是这个。我认为只有在显式调用GC时才显示GC_EXPLICIT
日志消息(即Android内存管理器没有运行GC,某些应用程序级代码正在这样做)。
如何找出明确调用GC的人员,以便更好地处理如何修复代码? 注意:我知道Android内存管理器可以并将调用GC。我的理解是GC_CONCURRENT
来电,而不是GC_EXPLICIT
来电。
更新:这是加载联系人缩略图的代码。它在后台线程上运行。
public static Bitmap loadBitmapFromContentUri(
ContentResolver resolver,
Uri uri
)
{
InputStream is = null;
Bitmap result = null;
try
{
is = resolver.openInputStream(uri);
result = BitmapFactory.decodeStream(is);
}
catch (FileNotFoundException e)
{
Log.e(
TAG,
"Failed to load photo for Uri " + uri + ": " + e.getMessage()
);
}
finally
{
if (null != is)
{
try
{
is.close();
}
catch (IOException e)
{ }
}
}
return result;
}