android报错之.OutOfMemoryError

发生环境:


联网上传图片的时候发生的错误

使用的联网工具 okgo

java.lang.OutOfMemoryError: Failed to allocate a 16637080 byte allocation with 8788384 free bytes and 8MB until OOM

解决方法:

<application
    android:name=".MyApp"
    android:allowBackup="true"
    android:hardwareAccelerated="false"
    android:icon="@mipmap/aiyunbei"
    android:label="@string/app_name"
    android:largeHeap="true"    //加上
    android:supportsRtl="true"  //加上
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">


 oom就是内存溢出,在上传大图片到服务器时,没有压缩的情况下,会超出安卓对内存的显示,一般是512M最大,192M最小

我的默认只有8M,很明显是小了。加上 android:largeHeap="true"  就可以使用。

当然,这样做的话,如果你上传的数据实在是太大,即便添加到上面那句话也是会报错怎么办?

只能从上传时的联网框架入手了,一般联网延时十秒八秒都可以了,但是如果上传的数据比较大的时候,请改成30秒!

基本没人愿意等30秒的,所以为了防止自己出错,就需要牺牲掉用户的感受。毕竟,谁让你上传辣么大的文件了?

对了,第二句本来跟这个报错无关,但是既然写了还是认识下:

 转载:http://blog.youkuaiyun.com/aa464971/article/details/51372204

声明你的application是否愿意支持从右到左(原来RTL就是right-to-left 的缩写...)的布局。

如果设置为true,targetSdkVersion设置为17或更高,各种RTL的API将被激活,系统使用您的应用程序可以显示RTL布局。如果targetSdkVersion设置为16或更低的设置为false,RTL的API将被忽略或没有影响您的应用程序将具有相同的行为无论对用户现场的选择相关的布局方向(你的布局会从左至右)。
此属性的默认值是false。
此属性被添加到API 17。

最后一句也说了,这个api是17(也就是Android4.2)以后才有的,并且这个属性默认是false,17以前的api不支持这个属性。

那这个支持从右到左的布局到底是个什么鬼呢。

经常玩机的朋友应该有发现,在设置-开发人员选项,有一个强制使用从右到左的布局方向,如图



既然有这么个东西,那就打开看看



打开之后变成这样了,原先在左边的文字被放到右边去了,在右边的开关,也被放到左边了,看到这个就明白了这个属性的意思了吧


所以,有需要耍一耍的就加上,没有的就删掉吧




### 解决方案 在 Ubuntu 上编译过程中遇到 `java.lang.OutOfMemoryError: Java heap space` 错误时,可以通过调整 JVM 的堆内存配置以及优化系统的资源分配来解决问题。 #### 1. 调整 Metalava 工具的堆内存大小 如果是在 AOSP 编译环境中遇到了该问题,则可以修改 Soong 构建工具链中的 Metalava 配置。具体操作如下: 编辑文件 `build/soong/java/droidstubs.go` 并增加以下参数以扩展 JVM 堆空间: ```go Flag("-J-Xmx6114m") // 将最大堆内存设置为 6GB 或更高 ``` 此更改会显著提升构建过程中的可用内存容量[^1]。 #### 2. 设置 Swap 文件 为了防止因物理内存不足而导致的崩溃,建议创建并启用一个较大的交换分区 (Swap) 来补充系统内存需求。以下是实现方法: - **停用现有 Swap** ```bash sudo swapoff /swapfile ``` - **删除旧的 Swap 文件** ```bash sudo rm /swapfile ``` - **新建更大的 Swap 文件** 创建一个新的 8 GB 或更大尺寸的 Swap 文件: ```bash sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` 通过以上命令可有效缓解由于 RAM 不足引发的问题[^3]。 #### 3. 修改 IDE 的编译器堆栈大小(适用于 IDEA) 如果是使用 IntelliJ IDEA 进行开发或者调试期间发生此类异常,则需手动提高其内部使用的 JVM 参数值。路径导航至: ``` File -> Settings -> Build, Execution, Deployment -> Compiler ``` 找到选项 `"Build process heap size"` ,将其数值增大到至少 2048 MB 或者更高的水平[^4]。 --- ### 总结 综合来看,针对不同场景下的 `OutOfMemoryError` 可采取多种措施加以应对。对于 Android 开发环境而言,重点在于合理规划硬件资源配置的同时也要注意软件层面的具体设定调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值