首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android性能优化:这是一份全面 & 详细的性能优化指南(含内存优化、布局优化等)

稳定性 影响Android 应用稳定性的原因有很多,主要是:应用崩溃(Crash)、应用无响应(ANR) 这2个错误的结果将导致程序无法使用 下面,将主要讲解该2个优化方向:应用崩溃(Crash)、应用无响应...资源节省性 优化原因 由于移动设备的硬件性能有限,故减少应用程序的资源消耗显得十分重要 优化方向 内存大小、安装包大小、耗电量 & 网络流量 6.1 内存优化 优化原因 避免因不正确使用内存...用户下载的门槛越高 特别在移动网络下,用户下载应用时,对安装包大小的要求更高,因此减小安装包大小可让更多用户愿意下载 & 使用产品 安装包结构 介绍 优化方案 6.3 减少网络流量 优化原因 每次获取资源时...都通过流量 & 网络加载的方式,将耗费大量网络流量 优化方案 主要通过 缓存 减少网络流量,采用三级缓存方案:即 内存缓存 - 硬盘缓存- 数据库- 文件 - 网络缓存 具体描述:当加载资源时...Android开发中的性能优化 所有知识,含:优化方向、原因 & 具体优化方案,下面用2张图总结:

6.9K12
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android Studio 4.1发布:可直接运行安卓模拟器、支持 Dagger 导航和 TensorFlow Lite 模型

    此版本的一大主题是帮助你在使用 Android Jetpack 库(这是 Android 的库套件,旨在帮助开发人员遵循最佳实践并更快地编写代码)时提高工作效率。...主题资源:主题资源位于 themes.xml(而非 styles.xml)中,并使用 Theme.名称。...我们在优化迭代速度方面投入大量资源,开发了一种无需安装应用即可在设备上部署和保留更改的方法。...当原生代码中发生崩溃或 ANR 时,系统会生成堆栈轨迹,这是你的程序在崩溃之前调用过的嵌套函数序列的快照。...在优化使用其他工具(如 Unity 或 Visual Studio)构建的 Android 游戏时,此功能很有用。

    4.2K30

    Android:友盟分享升级问题总结

    ---- 应用中使用了友盟分享,由于版本较低,并且测试组小伙伴在测试时发现了分享到微博崩溃的情况,所以考虑升级到最新版 6.9.4。...但是升级完之后,出现了下列问题: 1 问题现象 分享到微博时提示找不到 libweibosdkcore.so 文件 分享到微博/QQ时报错:java .lang .IllegalStateException...(2)、IllegalStateException的解决 A:问题现象 在小米6、Galaxy S9 手机中,分享到QQ时崩溃,报错信息如下: ?...但是,我们在集成友盟分享时,按照文档说明,为 AssistActivtiy 配置的 theme 为:android:style/Theme.Translucent.NoTitleBar。...B:解决方案 按照友盟文档中的示例,在小米6、Galaxy S9中会崩溃,示例如下: <activity android:name="com.tencent.connect.common.AssistActivity

    94310

    Android 天气APP(三十五)修复BUG、升级网络请求框架

    这个框架其实我单独写过一篇文章来介绍,文章地址如下: Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码) 想要详细了解里面过程的可以看看,不打算了解的,直接复制代码到使用的地方就可以了...因此每一个接口都需要更改。下面就用一个最简单的页面来说明:欢迎页面。 SplashContract,首先是这个页面的订阅器。 这是一个获取App版本号的请求,修改的内容如上图所示。...三、程序崩溃   程序崩溃对于App来说就是大问题了,因此要在开发时做反复的测试,这一点我有所疏忽。...问题出现的原因就是讯飞语音识别是弹窗的调用,context重复使用,导致当第一个页面调用了语音识别之后,第二个页面调用时引用的context还是之前的,但是之前的页面销毁了,则弹窗找不到显示的页面,页面崩溃报错...现在可以得出是页面绘制的问题,因此这里就要解决,其实最简单的办法就是修改资源文件目录,之前我的大图片都放在drawable下的,这其实有问题。

    38110

    Android 天气APP(三十五)修复BUG、升级网络请求框架

    这个框架其实我单独写过一篇文章来介绍,文章地址如下: Android OkHttp+Retrofit+RxJava搭建网络访问框架(含源码) 想要详细了解里面过程的可以看看,不打算了解的,直接复制代码到使用的地方就可以了...因此每一个接口都需要更改。下面就用一个最简单的页面来说明:欢迎页面。 SplashContract,首先是这个页面的订阅器。 这是一个获取App版本号的请求,修改的内容如上图所示。...三、程序崩溃   程序崩溃对于App来说就是大问题了,因此要在开发时做反复的测试,这一点我有所疏忽。...问题出现的原因就是讯飞语音识别是弹窗的调用,context重复使用,导致当第一个页面调用了语音识别之后,第二个页面调用时引用的context还是之前的,但是之前的页面销毁了,则弹窗找不到显示的页面,页面崩溃报错...现在可以得出是页面绘制的问题,因此这里就要解决,其实最简单的办法就是修改资源文件目录,之前我的大图片都放在drawable下的,这其实有问题。

    39030

    使用WebRTC开发Android Messenger:第1部分

    仅在为真时才执行写的操作。实际上,这并不是什么限制,当我测试它时,崩溃通常发生在两到三遍之后。...向量迭代的工作方式是从__begin_指针开始,然后递增直到达到__end_指针,因此,此更改意味着通常下次在析构函数中对向量进行迭代时,它将超出范围。...同样地,被攻击的应用程序的崩溃行为也很重要。这可能可以适用于在崩溃的情况下立即重生的应用程序,但是对于停止重生的应用程序实用性却要差很多,除非存在一定的延迟,而这在Android上很常见。...但是,大多数传出数据包都是在堆栈上生成的,因此无法使用堆损坏BUG对其进行更改。 我还考虑过使用崩溃Oracle来破解ASLR,但我认为使用这些特定的错误不太可能成功。...我还考虑过使用CVE-2020-6387更改vtable或函数指针以读取内存,导致崩溃Oracle可以检测到的行为或执行不需要破坏ASLR的基于偏移的利用。

    68220

    Android 代码混淆配置总结

    系统混淆配置 -dontusemixedcaseclassnames #混淆时不使用大小写混合类名 -dontskipnonpubliclibraryclasses #不跳过library...因为代码混淆,类名、方法名、属性名都改变了,而反射它还是按照原来的名字去反射,结果只射出一个程序崩溃 注解用了反射,所以不能混淆。...不混淆任何包含native方法的类的类名以及native方法名,否则找不到本地方法。...Activity不能混淆,因为AndroidManifest.xml文件中是完整的名字 自定义view也是带了包名写在xml布局中,不能混淆 六、混淆后使用时常见问题 当项目中出现so的native代码找不到...Java的方法的时候,可以尝试将 -keepclasseswithmembernames class * { native ; } 更改为: -keep class * {

    3.2K10

    Android开发者进退两难的出路;转行还是进阶?

    那么大多数Android开发可以转的方向主要有前端、后端和python等等。...,能力弱的找不到工作,用人单位招不到高级人员。...稍有点规模的公司,肯定都会遇到这种问题,比如上文中说的App在部分机型上崩溃、页面加载不出来等。只是大部分程序员会觉得难以复现,或者是因为小概率事件而忽略了。...以下是性能优化的思维导图:高性能代码编码实战,是带领大家将代码写起来;用户体验及资源消耗优化,是带领大家从用户体验的角度去修改现有的代码。 ?...如果你承认在Android方面真的不如别人,无法发挥你的天赋。请往上拉看文章前面转行的建议和方向。

    1.6K20

    Google Play 控制台指南:Google Play 控制台能为你做的都不仅仅是发布应用这么简单而已

    Android vitals 减少 21% 的崩溃,Cooking Craze....Android vitals(只有 Play 有足够的关于您应用的数据时,才会显示每一项)。...更多关于 Android vitals 的资源: 使用 Android vitals 提高你的应用的表现和稳定性 了解如何调试和修复 Android vitals 文档中的问题 在精不在多:为什么质量很重要...一个好的的商品详情应该有一个醒目的图标; 一个用于展示应用程序的特别之处的功能的图形,视频和屏幕截图(支持所有设备类别和所有方向); 以及一个引人注目的描述。...在分析这些数据时,需要注意两件关键的事情。首先是随着时间推移而变化的评分,特别是其上升或者下降时。平分的降低则表明你需要查看最近的更新。也许更新使得应用程序难以使用或引入了导致其更频繁崩溃的问题。

    7.4K30

    2016 移动应用质量大数据报告

    • 游戏崩溃率远高于应用崩溃率 无论是Android还是iOS,游戏的崩溃率都远高于应用,在iOS中的差异尤为明显。 ? 接下来让我们从Android开始,从多个维度进行应用质量分析。 ?...• 应用分类中视频、社交等行业崩溃率较高 Android应用行业整体崩溃率在2.0%~3.6%之间。其中视频、社交、音乐类应用的崩溃率较高,出行、新闻、儿童类应用的崩溃率较低。 ?...游戏相比应用一般需要用到更多的资源,占用更多的内存和CPU,游戏 ANR发生几率约为应用的1.5倍。 ?...• Android应用闪退现象更加严重 相较于2015年, 闪退(启动后0~5s内崩溃)问题占比提升10个百分点(12%提升到22%),Android系统由于其碎片化特征,厂商、机型、系统版本、分辨率等适配问题...• 造成闪退最常见的几种异常原因 根据数据分析,导致闪退问题除空指针异常外,找不到类和方法、权限问题、so加载异常、状态异常等问题比较明显,71%的闪退是由这5种问题引起,机型适配测试可以有效降低闪退问题的发生

    2.4K50

    Android 11 新工具 | 提升应用私密性和稳定性

    帮助您构建高质量的应用,是我们长期努力的一个方向。为此,我们经常寻找可以在工具和资源上投入精力的领域,这些工具和资源可以使您更加深刻地了解应用的性能。...关于这些 API 的实际使用情况,请查阅 代码示例: 除了帮助您识别私有数据访问之外,Android 11 还包含了另一个新的 API,用来辅助排查无法捕捉现场的崩溃。...您可以保存任意进程数据,这能非常有效地帮助您调试导致应用崩溃的代码段。...对于一些开发者来讲,了解应用终止之前的状态必不可少,比如: 游戏开发者可能希望了解进程终止之前用户的游戏等级,一种常见的解决方案是将数据持久化保存,并在应用下次启动时读取。...相关资源 我们希望您通过这些额外的工具可以提升应用的隐私意识和稳定性。

    71130

    BreakPad模拟Android native崩溃

    1.BreakPad简介 Google breakpad是一个跨平台的崩溃转储和分析框架和工具集合。...Breakpad由三个主要组件: client,以library的形式内置在你的应用中,当崩溃发生时写 minidump文件 symbol dumper, 读取由编译器生成的调试信息(debugging...BREAKPAD_HOME}/src/processor:${BREAKPAD_HOME}/src/tools/linux/dump_syms # 此处需要注意的是,路径中不要指定具体执行文件名,否则会报找不到相关命令...,例如${BREAKPAD_HOME}/src/tools/linux/dump_syms/dump_syms,这样执行dump_syms命令会找不到 ### 更新环境变量 source ~/.zshrc...mergeJniLibs/debug/0/lib/arm64-v8a/libbreakpad-native.so 0x325f4 我自己在输入的时候会提示arm-linux-androideabi-addr2line找不到

    1.6K20

    智能硬件sdk测试初探

    安装Android Studio比较适合开发同学和android端的测试同学,在安装adb工具的同时也完整安装了一套android的开发、debug环境。...1、命令行式,测试时完全通过adb shell命令的形式调用demo进行测试; 2、界面式,测试时可在屏幕上显示界面,通过在界面上操作来进行测试。 ?...稳定性测试中,我们会重点关注几个方面,结果、是否出现崩溃、资源占用情况。...对于结果的判断,一般demo会提供结果保存功能,我们可以分析保存的结果来进行判断;对于是否出现崩溃是最容易看到的,而出现崩溃以后,通常需要保存日志来供查看,这时可以利用adb logcat功能来保存日志...对于资源占用情况的分析,我们可以使用procrank命令监控内存,top命令监控cpu,并通过脚本的方式来获取。

    1.1K30

    听云SDK发布《中国移动应用性能管理白皮书》:高德路径规划API接口响应耗时最短

    报告显示:   从整体来看,iOS应用崩溃率远高于Android,基本是Android应用平均崩溃率的5倍。   iOS应用在2016年6月-8月崩溃现象尤其突出,或与新版本发布有关。   ...1 、 Android 和 iOS 系统下,各行业崩溃率表现不同 ?   Android系统中,崩溃率最高的为航空行业,崩溃率为2.05%。   ...对于Android系统来说,HTTP错误原因主要分布在404(服务器找不到请求的页面)、403(服务器拒绝请求)、503(未提供此服务)、500(服务器遇到错误,无法完成请求),以上原因占比86.55%...对于iOS系统来说,HTTP错误原因则主要分布在404(服务器找不到请求的网页)、400(请求错误)、502(网关故障)、401(未授权,需要客户端对自己认证),以上原因占比90.1%。   ...另外,报告中还提到了在iOS & Android两大平台下,崩溃率最高的TOP10应用系统版本、主流品牌手机排名前20的机型应用崩溃情况、不同性能指标下全国各地区分布情况、应用网络错误率及原因分布等重要性能数据

    1.7K50

    SQLite在NDK中的重生

    但是当程序运行到 Android N 上时,情况就不对了,整个程序直接崩溃,报的错误是 Can not load dynamic library "libsqlite.so"。...这样在编译时,静态库就链接到目标文件里去了。 ---- 到了这一步,可以说是成功了一半,这个时候运行程序,还是会崩的,主要会崩的地方有以下几个: ?...这两个函数的调用,须注释掉,在这里并不需要使用,而且放着会引起找不到函数的运行时异常。...另一处崩溃在于 Android 老版本的兼容,在 Android M 以后,调用 NDK 时,不再检查 __aeabi_d2ulz 和 __aeabi_d2lz(虽然这两个函数具体做了什么我也不知道,但是反编译看函数体...,是可以直接留空的),而老版本的 Android 会在调用 NDK 时进行导出函数检查,从而引发一个崩溃。

    1.5K10

    谁动了我的内存,揭秘 OOM 崩溃下降 90% 的秘密

    内存是极其稀缺的资源,不合理的使用会导致可用内存越来越少,可能会引发卡顿、ANR、OOM 崩溃、Native 崩溃等等,严重影响用户的体验。所以当我们在做性能优化的时候,内存优化是非常重要的环节。...分配的内存没有释放或者因为其他原因无法释放 • 资源泄露,比如 FD、socket、线程等等,这些在每个手机上都是有数量的限制,如果使用了不释放,就会因为资源的耗尽而崩溃,我们在线上就出现过 FD...Java 堆大小一样,都是 512 MB,如下图所示根据 Android 源码中的解释,Java 堆的大小应该是根据 RAM Size 来设置的,这是一个经验值,厂商是可以更改的,如果手机 Root...,降低低端机 OOM 崩溃率收敛 Bitmap,避免重复创建 Bitmap,退出界面及时释放掉资源(Bitmap、动画、播放器等等资源)内存回收兜底策略,当 Activity 或者 Fragment 泄露时...,与之相关联的动画、Bitmap、 DrawingCache 、背景、监听器等等都无法释放,当我们退出界面时,递归遍历所有的子 view,释放相关的资源,降低内存泄露时所占用的内存收敛线程,祖传代码在项目中有很多地方使用了

    1.1K30

    使用 React Native 重写大型 Ionic 应用后,我们想分享一下这八个经验

    而尽管我第一时间使用了 Google 来搜索,但是并不能第一时间找到合适的答案。因为在这个领域里,我算是半年新手,总会错失一些关键词。...想来这个生态已经是成熟了, 在这个过程中,尽管会遇到一些 iOS 打包的问题,Android 资源的问题。而如果你和我一样,也写过 Cordova 的插件,那么其实问题并不会太多,只是仍然会有一点。...由于,我日常用的手机是 Android 系统,而 React Native 的 Web 资源问题,实际上在 Android 和 iOS 上都会出现的。...Android 手机上需要将资源放在: file:///android_asset/,但是对于 iOS 也需要放在 assets 目录下,否则 Release 的时候,会找不到相应的资源。...对于 WebView 来说,并不会存在太大的崩溃问题,除非使用了原生组件。

    1.8K60
    领券