Я пытаюсь скопировать файл размером около 80 мегабайт из папки активов приложения Android на SD-карту.
Файл является другим apk. По разным причинам я должен сделать это таким образом и не могу просто дать ссылку на онлайн-апк или выложить его на рынок Android.
Приложение отлично работает с меньшими apks, но для этого большого я получаю ошибку нехватки памяти.
Я не совсем уверен, как это работает, но я предполагаю, что здесь я пытаюсь записать все 80 мегабайт в память.
try {
int length = 0;
newFile.createNewFile();
InputStream inputStream = ctx.getAssets().open(
"myBigFile.apk");
FileOutputStream fOutputStream = new FileOutputStream(
newFile);
byte[] buffer = new byte[inputStream.available()];
while ((length = inputStream.read(buffer)) > 0) {
fOutputStream.write(buffer, 0, length);
}
fOutputStream.flush();
fOutputStream.close();
inputStream.close();
} catch (Exception ex) {
if (ODP_App.getInstance().isInDebugMode())
Log.e(TAG, ex.toString());
}
Я нашел это интересным -
Вопрос о проблеме нехватки памяти с растровыми изображениями
Если я неправильно понял, в случае с битмапами, существует некоторый способ разделить поток, чтобы уменьшить использование памяти с помощью BitmapFactory.Options.
Это выполнимо в моем сценарии или есть другое возможное решение?