会Android的钓鱼佬 2023-12-14 11:17 采纳率: 60%
浏览 11
已结题

Android app内存分配

目前项目中有这么一个问题,设备是一个2+4g的设备,长期运行一个Apk,但在Apk中有内存不够的问题,Android系统默认分配256mb,开启最大堆分配512mb,无法关闭硬件优化(人脸识别系统需要),APK启动进入主页面占用400mb,进入人脸系统一直在500左右,人脸登录成功之后进入功能页会出现oom的问题,目前做了逻辑方面优化,启动模式优化,主页面因为做了长连接和mq必须长期存在,启动模式栈内复用,ondestory onstop onresume里也做了很多关于资源方面的一些销毁服用优化,目前想到的解决方案只是分配内存,有什么办法可以强制给Apk分配更多内存

  • 写回答

11条回答 默认 最新

  • giser@2011 2023-12-14 13:55
    关注

    在Android系统中,每个进程都有其分配的内存限制,即内存限制。当一个进程使用的内存超过其限制时,系统会抛出OutOfMemoryError异常。

    在Android系统中,可以通过以下方式来增加一个进程的内存限制:

    1. 调整堆内存大小:可以通过设置堆内存大小来增加一个进程的内存限制。在AndroidManifest.xml文件中,可以使用以下代码来设置堆内存大小:
    <activity>
         <meta-data  android:name="android.max_memory"  android:value="16973440"  />
    </activity>
    

    其中,16973440是堆内存的大小,单位是字节。

    1. 调整进程优先级:可以通过调整进程优先级来增加一个进程的内存限制。优先级越高的进程,分配的内存限制就越大。
    2. 使用虚拟内存:虚拟内存是一种将物理内存和硬盘空间组合起来的内存管理技术,可以通过使用虚拟内存来增加一个进程的内存限制。
    3. 使用内存分配工具:可以使用内存分配工具(如LeakCanary、MAT等)来检测内存泄漏,并优化内存使用。

    需要注意的是,增加进程的内存限制可能会影响系统的稳定性和性能。因此,应该在优化代码和资源使用的基础上,合理地设置内存限制。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 已采纳回答 12月16日
  • 创建了问题 12月14日

悬赏问题

  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL