| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 内存、I/O、网络、存储的优化实践 -> 正文阅读 |
|
[移动开发]Android 内存、I/O、网络、存储的优化实践 |
一 内存优化1.1 内存模型与分布上图是常见的java虚拟机的内存分布图:
1.2 内存限制android是基于Linux系统的,android中的进程分为两种。 1.2.1 native进程采用C/C++实现,不包含dalvik实例的linux进程,/system/bin/目录下面的程序文件运行后都是以native进程形式存在的。 1.2.2 java进程实例化了dalvik虚拟机实例的linux进程,进程的入口main函数为java函数。dalvik虚拟机实例的宿主进程是fork()系统调用创建的linux进程,所以每一个android上的java进程实际上就是一个linux进程,只是进程中多了一个dalvik虚拟机实例。 手机操作系统对每个app进程的内存是有限制的,可以通过如下命令查看限制大小:
可以在Androidmanifest文件中application节点加入android:largeHeap=“true”来增加其dalvik虚拟机中堆的大小 1.3 内存泄漏常见的内存泄漏:
1.3.1 leakcanary一般简单的内存泄漏可以直接在)中查到引用链路 1.3.2 MATMAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。 使用步骤:
1.3.3 Android Profiler主要关心以下几个区域:
1.4 优化实践
二 IO优化2.1 DataStore替换 SharedPreferencesDataStore是Jetpack近期新推出的组件,可以以下处理两种类型的数据持久化: DataStore Type Description Preferences DataStore 像SharedPreferences一样,以键值对的形式进行基本类型的数据存储。 DataStore 基于 Flow 实现异步存储,避免因为阻塞主线程带来的ANR问题 Proto DataStore 基于Protobuf实现任意自定义类型的数据存储,需要定义Protobuf的IDL,但是可以保证类型安全的访问 DataStore相对于SharedPreferences优点更多,可以完全替代SP的使用: 基于Coroutine Flow 实现 保证数据访问一致性 异常处理机制 异步访问,避免同步阻塞 基于Protobuf,实现非基本型数据的存储 附上一张Google官方的对比表格: 2.2 Netty 的 ByteBuf更高效的字节流操作,可以使用Netty 的 ByteBuf替换 JDK中的bytebuffer。 bytebuffer 是 Java NIO 里面提供的字节容器。有一个指针用于处理读写操作,每次读写的时候都需要调用 flip()或是 clear()方法,不然将会报异常。
三 网络优化优化前先描述一下一条正常网络请求的流程:
在了解了网络请求的流程后,针对上面这三步流程分别进行优化: 3.1 DNS 优化在 Android APP 访问网络的时候,第一步就是 DNS 解析,默认使用运行商的 LocalDNS 服务,DNS 完整的解析流程很长,会先从本地系统缓存取,若没有就到最近的 DNS 服务器取,若没有再到主域名服 务器取,每一层都有缓存,但为了域名解析的实时性,每一层缓存都有过期时间。 目前各大云服务商,阿里云和腾讯云等都提供了自己的 HTTPDNS 服务,对于我们普通开发者,只需要付出少量的费用,在手机端嵌入支持 HTTPDNS 的客户端 SDK,即可使用。 在使用okhttp时默认使用系统的DNS服务,可以通过okhttp中的.dns()接口,配置HTTPDNS。 3.2 连接优化优化方式:
3.3 数据传输优化
四 存储优化4.1 ContentProvider
4.2 Serializable
4.3 Parcelable
4.4 Room在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库访问机制。 Room 包含 3 个重要部分:
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 9:47:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |