Недостаточно памяти на 10171204-байтовом распределении в приложении Android - PullRequest
1 голос
/ 14 ноября 2011

в моем приложении я пытаюсь загрузить видео в нажатие кнопки.Я показываю индикатор выполнения в области уведомлений, я уже задавал вопрос относительно этого здесь (он находится в разделе «Баунти»)

Теперь, чтобы решить мою проблему, я изменил код так, чтобызатем, когда первая кнопка нажата, она запускает индикатор выполнения в уведомлении классом UploadService, расширяет IntentService, и индикатор выполнения отображается

При нажатии второй кнопки она пытается запустить другую индикатор выполнения в уведомлениикласс UploadService2 расширяет IntentService, но сразу же происходит сбой приложения, и он показывает следующую ошибку следующим образом

E/dalvikvm-heap( 2325): Out of memory on a 10171204-byte allocation.
E/AndroidRuntime( 2325): Uncaught handler: thread IntentService[UploadService2] exiting due to uncaught exception
E/AndroidRuntime( 2325): java.lang.OutOfMemoryError
E/AndroidRuntime( 2325):        at uk.me.hardill.android.notification.UploadService2$1.run(UploadService2.java:93)
E/AndroidRuntime( 2325):        at uk.me.hardill.android.notification.UploadService2.onHandleIntent(UploadService2.java:134)
E/AndroidRuntime( 2325):        at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:30)
E/AndroidRuntime( 2325):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2325):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 2325):        at android.os.HandlerThread.run(HandlerThread.java:60)

Мой класс UploadServices равен здесь

1 Ответ

7 голосов
/ 14 ноября 2011

Учитывая, что вы используете только буфер в этом бите кода:

byte[] buffer = new byte[10171188];
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) 
{
    fos.write(buffer, 0, len1);
}

ответ кажется довольно простым: используйте меньший буфер. Даже на настольном компьютере я обычно создавал бы буфер размером около 32 КБ - создание 10 МБ буфера на мобильном устройстве - это действительно плохая идея IMO.

Даже если вы могли бы заполнить этот буфер, вам не нужно иметь такой большой - и поскольку вы на самом деле выбираете сетевой ресурс, невероятно маловероятно, что когда-либо будет использоваться даже 1% буфера быть заполненным в одном чтении.

...