2013-08-22 7 views
0

У меня есть приложение для Android, в которой я сделать вызов, чтобы получить много данных, я получал ошибку OutOfMemoryException поэтому я исследовал и нашел решение:Выделение динамической памяти по требованию

Добавить android:largeHeap = true, это прекрасно работает, Я больше не получаю ошибок, но я также читаю, что это не хорошо, потому что это может заблокировать пользователей других приложений. Есть ли способ назначить число исправлений HEAP, которое приложение может использовать ?. Во время отладки с помощью logcat я увидел, что это будет не так, как мне нужно, чтобы получить дополнительную информацию из базового или по умолчанию пространства HEAP, которое оно предусмотрено, но оно достаточно велико, чтобы вызвать OutOfMemoryException.

Новое в андроиде и пытаясь понять это, я бы не хотел, чтобы мои пользователи приложений разобрались, потому что я взял всю память HEAP.

PS: Приложение хорошо подходит для телефонов с Android версии 4.0 и выше.

ответ

0

К сожалению, у вас нет возможности назначить номер приложения HEAP для вашего приложения, и назначенное пространство кучи может варьироваться в зависимости от устройств.

Один из вариантов - это проверить доступное пространство динамически во время выполнения и выполнить некоторую работу на основе анализа. Есть несколько способов проверить доступное пространство памяти на Android, но я предпочитаю использовать getMemoryClass вот так. (Я скопировал код от Square's Picasso library)

//memory class is MB units. 
ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE); 
boolean largeHeap = (context.getApplicationInfo().flags & FLAG_LARGE_HEAP) != 0; 

int memoryClass = am.getMemoryClass(); 
if (largeHeap && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    memoryClass = ActivityManagerHoneycomb.getLargeMemoryClass(am); 
}