我正在使用内部有许多活动的应用程序。还有listview图像等。这是来自apk的图片。 这是一张图片
首先问一下这个带红圈的记忆是什么?拉姆?还是堆内存? 第二个问题每个apk的正常大小是什么。它比一些内存安全吗? 第三个问题我的应用程序,如果此内存超过380mb。在某些情况下,它崩溃我的apk.with错误消息apk没有回应。我可以为此做点什么吗? 最常见的活动使用包含内容项的列表视图:以下是我的代码的一部分: 我在我的apk中使用了非常多的sqlite。
var table = db.Query<InventoryPreviewClass>(
"select * from InventoryPreviewClass where CategoryID =" +
Connection.CategoryID + " and InventoryItemName like '%" +
etSearchAlwaysOn.Text.ToUpper() + "%'");
mItems = new List<InventoryPreviewClass>();
foreach(var item in table)
{
mItems.Add(new InventoryPreviewClass() {
InventoryItemID = item.InventoryItemID,
InventoryItemName = item.InventoryItemName,
InventoryItemPrice = item.InventoryItemPrice
});
}
MyListViewAdapterInventory adapter = new MyListViewAdapterInventory(this, Resource.Layout.InventoryPreview, mItems);
mlistview.Adapter = adapter;
我也标记java导致其类似的
答案 0 :(得分:2)
首先问一下这个带红圈的记忆是什么?拉姆?还是堆内存?
工作集:指进程使用的总物理内存(RAM)。有关详细信息,请参阅:What is private bytes, virtual bytes, working set?
第二个问题每个apk的正常大小是多少。它比大量内存安全吗?
Android提供MemoryClass on ActiviyManager API以获取您设备的价值,对于deatail信息,您可以参考:What is the maximum amount of RAM an app can use?
如果此内存超过380mb,请回答我的申请。在某些情况下,它崩溃了我的apk。
正如你所说,你的应用程序有ListView
图像,在某些情况下它会崩溃你的apk,当你的应用程序一次加载很多图像时会占用大量内存,通常会导致{{1} },所以我认为你的问题是OutOfMemoryError。 您应该更加关注应用中的堆大小,而不是OutOfMemoryError
。正如Android document所说:
为了允许多个正在运行的进程,Android为每个应用分配的堆大小设置了硬限制。 根据设备总体可用RAM的大小,设备之间的确切堆大小限制会有所不同。如果您的应用已达到堆容量并尝试分配更多内存,系统将抛出OutOfMemoryError。
由于我们不知道您是如何将图片加载到列表视图中的,因此以下是一些建议:
Picasso.With(context).Load(imageUrl).Into(imageView);
。 Xamrin.Android示例here。