IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 故障:Failed to allocate a 65109516 byte allocation with 4191168 free bytes and 56MB until OOM -> 正文阅读

[移动开发]故障:Failed to allocate a 65109516 byte allocation with 4191168 free bytes and 56MB until OOM

描述

在执行图片加载或使用bitmap时,图片过大会出现Failed to allocate a 65109516 byte allocation with 4191168 free bytes and 56MB until OOM

过程

经过计算确实发现是由于设备内存不够导致的现象,也是与bitmap或图片加载时占用内存过大导致

测试

方案

通过网上查询,找到方法为添加

android:largeHeap="true"
android:hardwareAccelerated="false"

添加位置为AndroidManifest.xml

<application
        android:name=".my.ImApplication"
		android:largeHeap="true"
		android:hardwareAccelerated="false"
        android:theme="@style/AppTheme">

调试

通过profiler的内存分析如下图,初步分析相较于未添加前会稍小,但少的有限
在这里插入图片描述继续进行多次的任务添加,观察到内存逐渐增加,且最后抵达峰值后,apk崩溃,经过对设备物理内存分析,确定内存确实被消耗完毕
在这里插入图片描述

largeHeapde作用

而android:largeHeapde的作用为让应用能申请使用更多的内存,通过adb shell getprop发现

[dalvik.vm.heapgrowthlimit]: [128m]
[dalvik.vm.heapsize]: [256m]

这里heapgrowthlimit就是一个普通应用的内存限制,用ActivityManager.getLargeMemoryClass()获得的值就是这个。而heapsize是在manifest中设置了largeHeap=true之后,可以使用最大内存值。设置largeHeap的确可以增加内存的申请量。但不是系统有多少内存就可以申请多少,而是由dalvik.vm.heapsize限制。
通过对比,发现android:largeHeapde确实将内存限制突破,但是回退版本至未添加android:largeHeap时,实际上也将内存限制突破,而根据可能与本人的apk版本的权限为系统级。
以上:发现android:largeHeapde并无大用处,但是相较于未添加时至少有轻微的好转。
而当添加了android:largeHeapde后,进行usbcamera时却出现崩溃现象,而现象原因在于另一句内容:android:hardwareAccelerated=“false”

hardwareAccelerated作用

主要功能是启用硬件加速,而缺点是占用内存
从Android3.0(API Level 11)开始,Android 2D渲染管道能够更好的支持硬件加速。硬件加速执行的所有的绘图操作都是使用GPU在View对象的画布上来进行的。因为启用硬件加速会增加资源的需求,因此这样的应用会占用更多的内存。
启用硬件加速的最容易的方法是给整个应用程序都打开全局硬件加速功能。如果应用程序只使用标准的View和Drawable,那么打开全局硬件加速不会导致任何的不良的绘制效果。但是,因为硬件加速并不支持所有的2D图形绘制操作,所以对于那些使用定制的View和绘制调用的应用程序来说,打开全局硬件加速,可以会影响绘制效果。问题通常会出现在对那些不可见的元素进行了异常或错误的像素渲染。

而使用usbcamera需要用到硬件加速,故导致设备的usb启动问题。

总结

该方案可能存在一定的可行性,但是在本人项目中的优化不明显,且导致其他问题,故不可采用该方法

相关链接:
https://blog.csdn.net/handingnihao/article/details/111946324

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 23:19:35  更:2022-04-06 23:22:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 22:04:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码