Android性能优化之修复游戏中内存泄漏(java层)

news2024/10/3 8:25:30

游戏在bugly上内存OOM越来越严重,因此,近期对内存进行优化。从java层的内存进行优化开始,通过LeakCannary或者adb shell 获取到内存快照,发现好几处内存泄漏点。

1.单例类持有Activity

在这里插入图片描述
查看内存快照,该闪屏页面Activity(包含引用对象)可回收3.8M的内存;
LeakCannary的内存分析也证明了该对象占用的内存大小,持有1380对象。
在这里插入图片描述
持有关系:
context.getContentResolver()注册ContentObserver-->Activity的匿名内部类Listener -->splashActivity。
在这里插入图片描述
解决方式:将匿名外部类,设置外部类或者挪动到其他类中设置。
在这里插入图片描述

2.屏幕方向导致Activity被持有

WXPayEntryActivity的屏幕选择导致的内存泄漏:
在这里插入图片描述查看ActivityThread中源码:
[图片]
接着继续,看下是什么情况下会调用:
在这里插入图片描述
打开微信是竖屏显示,而游戏是横屏显示,因此当微信界面关闭后,会到游戏进程中创建Activity时,需调整屏幕,会调用 overrideApplicationDisplayAdjustments()矫正。
接着查看,手机系统,发现屏幕设置是自动旋转。
再来查看下WXPayEntryActivit的屏幕配置是默认:
在这里插入图片描述
解决方式:加上android:screenOrientation="sensorLandscape"

在这里插入图片描述

3.Activity作为context被系统类持有

在这里插入图片描述
在广告页面的Activity 被GestureBoostManager持有,解决方案,是使用Appliction 作为context 去获取系统类。

建议

  • 尽量避免持有Activity ,尽量使用Application(除开dialog外);
  • 使用Acitivity中使用 匿名内部类(避免:new Listener)等,在Ondestory()中要移除,避免匿名内部类持有Activity导致内存泄漏
  • 避免将Activity有关的属性或者持有的activity的对象设置成static ,避免造成内存泄漏;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用

文章目录 数值型关联变量数值型关联变量的种类介绍 单选按钮与复选框单选按钮的组内选择原理解析单选按钮和复选框以及应用数值型关联变量的开发CMainDlg.cppCInputDlg.hCInputDlg.cpp 附录 数值型关联变量 数值型关联变量的种类介绍 1、 数值型关联变量: a)控件型…

STM32MP157驱动开发——按键驱动(异步通知)

文章目录 “异步通知 ”机制:信号的宏定义:信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制: 信号的宏定义&#x…

请问学JavaScript 前要学html 和css 吗?

前言 html和css可以理解为是一个网站的骨架和皮肤,这两部分做好后整个网站的外观展示的完成度基本就有了个90%左右,所以在学习js前是需要学习html和css 的,这两部分不用花特别多的时间(虽然css如果想做一些非常炫酷的效果个人认为…

记一次容器环境下出现 Address not available

作者:郑明泉、余凯 困惑的源地址 pod 创建后一段时间一直是正常运行,突然有一天发现没有新的连接创建了,业务上是通过 pod A 访问 svc B 的 svc name 的方式,进入 pod 手动去 wget 一下,发现报错了 Address not avai…

Roslyn 动态编译

NET 编译器平台(.NET Compiler Platform) 也称为Roslyn,是Microsoft的一组用于C#和Visual Basic (VB.NET) 语言的开源 编译器和代码分析 API。 该项目特别包括C# 和 VB.NET 编译器的自托管版本——用语言本身编写的编译器。编译器可通过传统…

vue2路由(个人学习笔记四)

目录 友情提醒第一章、路由简介1.1)什么是路由1.2)安装路由插件 第二章、自定义路由器2.1)创建路由器文件index.js文件2.2)index.js文件中配置路由信息 第三章、使用路由器3.1)在main.js文件中将路由器绑定到Vue对象3.…

查看maven发布时间的方法

查看maven发布时间的方法如下【 打开maven官网 选中Release Notes 即可查看对应版本的发布时间 】

【Linux命令200例】cmp文件比较工具

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,2023年6月csdn上海赛道top4。 🏆本文已收录于专栏:Linux命令大全。 🏆本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

微信小程序开发知识点总结(不断补充)

一、怎样实现小程序与数据库的交互原理 微信小程序开发里面是不能直接写数据库连接文件,如果要实现与数据库的交互,就需要用到中间的接口。(这个接口可以理解成springboot项目中controller层的RequestMapping的URL)具体用法如下&…

Thunderbird 115 带来了Supernova UI 和先进功能

导读Thunderbird 115 带来了Supernova UI 和先进功能,将电子邮件带入了新的高度。 流行的开源电子邮件客户端 Mozilla Thunderbird 推出了最新版本Thunderbird 115,它带来了一系列令人兴奋的功能和改进。更新带来了令人耳目一新的超新星用户界面(UI)&…

STM32MP157驱动开发——按键驱动(线程化处理)

文章目录 “线程化处理”机制:内核函数线程化处理方式的按键驱动程序(stm32mp157)编程思路button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “线程化处理”机制: 工作队列是在内核的线程的上下文中执行的 工作队列中有多个 work&#xff0…

matlab安装激活后报错找不到icuuc54.dll

matlab激活后,有报错找不到icuuc54.dll 解决办法: 这是因为破解用的版本不一样,我下载的是matlab2016b,但是破解时,在网上下载的matlab2016a的破解包,所以我重新下载2016b的crack包后,然后再在…

使用Vs Studio和Cmake生成C++库

使用Vs Studio和Cmake生成C库 在windows系统下,由于没有C的编译器,想通过源码安装、加载C的库存在不方便的地方。本文将介绍通过使用Vs Studio运用Cmake的方式,编译一个简单的自定义库,并进行加载、调用。 工程源代码 前提条件 …

Python增删改查小练习

目录 1. List操作-增加 2. List操作-查询 3. List操作-修改 4. List操作-删除 资料获取方法 1. List操作-增加 List Append(“xx”) 插入到列表尾部 Insert(x,xx) 在指定的位置插入 Extend 将列表的元素分开,插入到之前列表的尾部 小练习: 把一个字符串”abcdefg…

小白必看系列之c语言中常见操作符示例和用法总结

文章目录 前言算术操作符(Arithmetic Operators)代码示例代码解析 关系操作符(Relational Operators)代码示例代码解析 逻辑操作符(Logical Operators)代码示例代码解析 位操作符(Bitwise Opera…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了,否则,连写个博客都没法写,这叫什么事! https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图(肯定比我在这里胡说八道强的多&#xff0…

【设计模式——学习笔记】23种设计模式——原型模式Prototype(原理讲解+应用场景介绍+案例介绍+Java代码实现)

原型模式 介绍 原型模式指用通过拷贝原型实例创建新的实例,新实例和原型实例的属性完全一致原型模式是一种创建型设计模式工作原理是通过调用原型实例的 clone()方法来完成克隆,原型实例需要实现Cloneable接口,并重写clone()方法需要为每个…

平台化的测试工具推荐|一站式测试平台RunnerGo

互联网行业的发展到今天越来越多的公司更加注重工作效率和团队协作,越来越多的产品也趋于平台化,平台化也更有利于提高团队效率,代码管理、持续构建、持续部署这些工具的发展都是非常超前的,它们对于团队协作的支持和工作效率的提…

河南移动联合中兴打造SPNPTN网络融合示范样板

最近河南移动和中兴在濮阳进行SPN和PTN两网融合规模部署,可以充分展示出PTN网络价值,并优化网络结构、降低网络运营成本,实现SPN和PTN网络的融合融通,在增强SPN网络综合业务承载能力之余也能提升了网络性能。 河南移动现在是SDH、…

CF1837 A-D

A题 题目链接:https://codeforces.com/problemset/problem/1837/A 基本思路: 要求计算蚂蚱到达位置 x最少需要多少次跳跃,并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离(距离必须为整数),但是…