- 博客(313)
- 资源 (12)
- 收藏
- 关注
原创 Binder 治理 减少ANR
在 Android 中,**Binder 调用**是跨进程通信(IPC)的核心机制,几乎所有与系统服务(如 `ActivityManagerService`、`WindowManagerService` 等)的交互都会触发 Binder 调用。- **合并请求**:将多个 Binder 调用合并为批量操作(如 `getInstalledPackages()` 代替多次 `getPackageInfo()`)。
2025-03-05 14:55:40
594
原创 Android 稳定性优化总结
应用稳定性是最重要的性能指标之一,是APP质量构建体系中的基本盘,如果应用的稳定性出现问题,对产品、用户造成的伤害将是致命的。本文将从以下几个方面对应用稳定性优化进行整理。需要说明,广义的稳定性不仅仅是崩溃问题,还包括卡顿、耗电、温度等指标,本文主要从崩溃率的角度进行学习。稳定性常见指标分类:业界用来衡量稳定性的常见指标,稳定性优秀的衡量标准。处理Crash的一般步骤:发生Crash时常规的处理步骤。业务高可用性建设:在维护一整块业务时,为了防止出现稳定性问题,所采用的手段。
2025-02-07 13:55:39
1165
原创 AI编程助手
AI编程助手在国际市场上,GitHub Copilot 成为一枝独秀,JetBrains AI、Codium 也紧追不放。开发者们获得了数倍的效率提升。而在国内市场,各大厂商也纷纷投入资源,大力推出自家的平替工具。比如: Baidu Comate、智谱CodeGeeX、阿里通义灵码、腾讯云 AI 代码助手、华为CodeArts Snap、讯飞iFlyCode、商汤代码小浣熊,这些助手对于编程提效是实实在在的,企业如果抛开代码安全的考虑,工程师使用这些工具可以极大的提升开发效率。
2025-01-23 16:36:23
93
原创 Android system.log 意义
Log名称 作用 获取命令 system.log 包含ANR发生时间点信息、ANR发生前的CPU信息,还包含大量系统服务输出的信息 adb logcat –b system main.log 包含ANR发生前应用自身输出的信息,可供分析应用是否有异常;此外还包含输出的GC信息,可供分析内存回收的速度,判断系统是否处于低内存或内存碎片化状态 adb logcat –b main event.log 包含AMS与WMS输出的应用程序声明周期信息,可供分析窗口
2025-01-15 10:19:19
102
原创 深入探索Android稳定性优化
重在预防、监控必不可少思考更深一层、重视隐含信息:如解决Crash问题时思考是否会引发同一类问题长效保持需要科学流程优点:比较灵活,预先分配好资源,成功率也比较高。缺点:实现非常复杂重在预防:重视应用的整个流程、包括开发人员的培训、编译检查、静态扫描、规范的测试、灰度、发布流程等不应该随意使用try catch去隐藏问题,而应该从源头入手,了解崩溃的本质原因,保证后面的运行流程。解决崩溃的过程应该由点到面,考虑一类崩溃怎么解决。崩溃与内存、卡顿、I/O内存紧密相关。
2024-12-16 10:47:08
1070
原创 Baseline Profiles 在 Compose 中的应用
为什么需要 Baseline Profiles?应用启动运行时解释执行(JIT)代码,并将热点代码翻译为机器代码,此过程需要时间,因此会降低性能,那 Baseline Profiles 是做什么的呢?就是将原本运行时解释执行的热点代码提前准备好,在应用处于空闲时,可以直接将热点代码编译成机器代码,这时在下次运行时可被直接执行,省去了运行时解释代码的过程,为应用启动提升性能。
2024-09-06 18:24:19
1282
原创 input dispatching timeout OS 版本对应反应
主线程耗时超过5s且有下一个输入事件在卡顿阶段输入,才会引发ANR。前台 输入事件后主线程阻塞8s,8s内再次输入事件。前台 输入事件后主线程阻塞8s,8s内切换到后台。前台 输入事件后主线程阻塞8s,无其他操作。切换到后台后,需重新获取焦点后才做ui刷新。验证不同系统下对于此类ANR的产生情况。切换到后台后开始阻塞8s,并做ui刷新。系统越高,对ANR的容忍度越低。有(需多次点击>10次)有(需多次点击>10次)切换到后台后开始阻塞8s。有(需多次点击>5次)
2024-08-15 15:16:35
390
原创 Android中的LowMemoryKiller机制
进程的启动分为冷启动和热启动,当用户退出进程后,Android系统不会立即将此进程回收,而是将其放到后台运行,下次再启动这个程序的时候,直接将这个放在后台的进程拉起来使用,加快启动速度,这种启动方式称为热启动。而冷启动则是重新为这个程序分配进程。那么问题来了,当启动的程序较多,然后又退出了,后台就会留下很多这种空的进程,占据了大量的内存空间。Android当内存剩余的空间满足一定的条件时,会对后台的进程进行查杀,以保证内存是可用的,这就是Android中LMK(LowMemoryKiller机制)
2024-08-02 13:02:44
1677
原创 史上最全Android混淆模版【含海外广告SDK】
---------------------------Part----------------定制化区域----------------------------------------------#------------------------------Part-------------基本不用动区域----------------------------------------###---------------Begin Admob 下 reklamup。
2023-11-23 14:03:32
1587
原创 Android 性能优化篇之SharedPreferences使用优化
SharedPreferences(以下简称SP)`是Android本地存储的一种方式,是以`key-value`的形式存储在`/data/data/项目包名/shared_prefs/sp_name.xml`里。
2023-05-20 17:18:44
1290
1
转载 今日头条 ANR 优化实践系列 - 设计原理及影响因素
再来看一下有序广播的发送和接收逻辑,同样在系统 AMS 服务中,BoradCastQueue 获取当前正在发送的广播消息,并取出下一个广播接收者,更新发送时间戳,以此时间计算并设置超时时间(但是系统在此进行了一些优化处理,以避免每次广播正常接收后,都需要取消超时监控然后又重新设置,而是采用一种对齐的方式进行复用)。ANR 问题,对于从事 Android 开发的同学来说并不陌生,日常开发中,经常会遇到应用乃至系统层面引起的各种问题,很多时候因为不了解其运行原理,在面对该类问题时可能会一头雾水。
2023-05-20 15:13:36
374
原创 Android 动画
android:duration 动画持续时间android:fillAfter 为true动画结束时,View将保持动画结束时的状态android:fillBefore 为true动画结束时,View将还原到开始开始时的状态android:repeatCount 动画重复执行的次数android:repeatMode 动画重复模式 ,重复播放时restart重头开始,reverse重复播放时倒叙回放,该属性需要和android:repeatCount一起使用。
2023-02-01 15:05:38
1537
原创 防止Android点击app图标应用重启
关于app第一次安装,进入主页后再进入一个界面A,然后home键回到桌面,再点击app图标,应该显示哪个界面?1. 第一步:删除第一个Activity的启动模式,或者改为“standard”。第二步:在application中去设置持久化为 true,防止app挂后台被回收。造成这种问题的主要原因:国内手机厂商问题,以及手机自带的第三方手机管家。3. App 重新加载启动页的时候,判断是否已经加载过一次。但是那是相对于Google原生的系统来说,是界面A。有的人肯定说是界面A。
2022-11-03 17:38:28
1459
原创 Android开发中VSS、RSS、PSS、USS的区别
表示一个进程在RAM中实际使用的空间地址大小,它按比例包含了共享库占用的内存。假如有3个进程使用同一个共享库,那么每个进程的PSS就包括了1/3大小的共享库内存。在实际中很少用这种方式来表示进程占用内存的情况,用它来表示单个进程的内存使用情况是不准确的。RSS可能会产生误导,因为它报告进程使用的所有共享库的总数,即使共享库只加载到内存中一次,无论有多少进程使用它。表示一个进程在RAM中实际使用的空间地址大小,包括了全部共享库占用的内存,这种表示进程占用内存的情况也是不准确的。
2022-10-20 10:47:16
1513
原创 Kotlin Sealed Class
Sealed Classes 受限制: 必须在同一文件中,或者在 Sealed Classes 类的内部中使用,在Kotlin 1.1 之前,规则更加严格,子类只能在 Sealed Classes 类的内部中使用。正如你所看到的,在 Sealed Classes 内部中,使用 object 声明时,我们可以重用它们,不需要每次创建一个新实例,当这样使用时候,它看起来和枚举非常相似。如果你不需要多次实例化,也不需要不提供特殊行为,或者也不需要添加额外的信息,仅作为单个实例存在,这个时候使用枚举更加合适。...
2022-08-18 14:32:10
591
原创 加固调研实录
背景问题:Appsealing1、启动速度慢 :原 1s左右 ,加固后 3-4 s, 慢 2-3 s目标:保证安全的前提下,启动时间变快,兼容性变好。问题分析:为什么慢——> Dex 加壳, 整体加固,启动慢,兼容问题#1、AppsealingSelect Dex 部分Class加固【作用不显著】Appsealing 研究中,有时间反馈#2、是否有替代技术,加固技术分析。VMP和JAVA2c 技术 #不加固混淆,自己些混淆策略...
2021-11-12 15:55:42
2322
原创 mac环境下Android 反编译
一、需要的工具apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件。 dex2jar:将反编译后的classes.dex文件转化为.jar文件。 jd-gui:用于将.jar文件转换成java代码。二、反编译步骤第一步:使用apktool工具对APK进行反编译1. 下载apktool下载apktool2. 把下载好的apktool脚本和apktool.jar文件移动到 /usr/local/bin 文件夹下菜单栏点击「
2021-10-08 16:43:08
268
原创 Android 加固厂商特征
爱加密libexec.so, libexecmain.so,ijiami.dat娜迦libchaosvmp.so , libddog.solibfdog.so梆梆libsecexe.so, libsecmain.so梆梆企业版libDexHelper.so , libDexHelper-x86.so360libprotectClass.so, libjiagu.solibjiagu.so, libjiagu_art.solibjiagu.so, libjiagu_x86.so.
2021-10-08 15:42:55
1496
原创 Android 轻量级存储方案的前世今生【SharedPreferences、MMKV、Jetpack DataStore】
背景对于 Android 轻量级存储方案,有大多数人都很熟悉的 SharedPreferences;也有基于 mmap 的高性能组件 MMKV,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强;还有 Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和流程(Flow)以异步、一致的事务方式存储数据。本文将一一分析这三个方案的来龙去脉,并深入源码进行分析。(本文基于Android 29 源码
2021-09-18 11:22:03
943
原创 Team leader的几点看法
每年给组员做PR的时候,总会谈及职业规划的问题。也总会被被问到怎样何时才可以做一个lead,为什么自己不能做lead?就从别处收集了一些自己也加了一些作为一个指引。但实际在具体操作时,也是每个manager见仁见智的事情,而且有时需要激励和推动才能挖掘出他/她的潜能。基本1.理解及分解能力,能够准确的理解上级给出的任务并合理的分解2.目标设置能力,能够将任务,时间,注意事项,期望结果,标准等明确的告诉你的组员3.监控进度和质量,收集组员的进度及汇总,评估组员的工作质量4.时间管理能力,合理的安
2021-09-15 10:36:01
323
原创 Android从码农到架构师的技术成长之路
在这里我把攻城狮分成初级、中级、高级和资深四个阶段,分别对研发设计能力、工具使用、系统原理和架构等作出要求。初级我对初级研发攻城狮的定义是掌握基础的android知识,能够独立完成一个功能。这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。需要的技能有:掌握android 四大组件知识,深入了解相关生命周期;对于Application、Fragment、Intent也必须掌握。 掌握android 基本布局和控件的属性和使用,常用布局有LinearLayout\Relative
2021-07-07 17:33:01
244
原创 静态和动态代理模式
代理模式,也称委托模式,是结构型设计模式之一,何为代理呢? 在日常生活中就比如叫朋友替你拿个快递,叫朋友替你做一下作业,叫朋友替你买点东西等等,这个朋友就是你的代理,你把事情委托你的朋友做了,同样在代码的世界中也存在代理,而且在你以后阅读到更多的设计模式时,你会发现很多的设计模式中也有代理模式的影子,代理模式是一个非常重要的设计模式,代理模式分为静态代理和动态代理,本文将会通过一个简单的例子讲解静态代理,然后引出动态代理,并且深入的探讨一下动态代理的实现原理。代理模式的定义为其他对象提供一种代理以控
2021-05-24 10:59:23
354
1
原创 一篇文章搞懂android存储目录结构
存储分类内部存储内部存储位于系统中很特殊的一个位置,对于设备中每一个安装的 App,系统都会在 data/data/packagename/xxx 自动创建与之对应的文件夹。如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。对于这个内部目录,用户是无法访问的,除非获取root权限。String fileDir.
2021-03-24 14:51:39
550
原创 Doze和App Standby模式下的Android应用适配
从Android6.0(API23)开始, Google为Android加入了两种省电特性,通过管理Android应用(以下简称应用)在非充电状态下的设备中的运行策略来达到延长用户的Android设备使用时间的目的。这两种特性存在一定的差别,Doze模式通过延缓应用在设备长时间待机状态下对于CPU和网络资源的使用来实现节能;而App Standby则是通过延缓最近未被使用的后台应用对于网络的请求来达到同样的目的。Doze和App Standby在Android6.0及以上的Android设备中可以影响所
2021-03-22 16:10:38
388
原创 Android性能优化 -- Systrace工具
Systrace简介一般来说,我们的机器以60帧/秒显示时,用户会感觉机器很流畅,如果显示时出现丢帧的情况,需要知道当前整个系统所处的状态,这个时候Systrace便是最佳的工具选择。Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统(如Surfaceflinger、WindowManagerService等framework部分关键模块、服务)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。Systr...
2021-03-08 16:44:30
741
原创 最强 Android Studio 使用小技巧和快捷键总结
写在前面本文翻译自Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键。 根据这些小技巧的使用场景,本文将这62个小技巧分为常用技巧(1 – 28)、编码技巧(29 – 49)和调试技巧(50 – 62),分成三个部分。每个小技巧都配有 gif 动图,由于原图在 google photo 上,加载较慢,本文全部转存到七牛上了。由于能力有限,翻译过程中难免有所疏漏,如发现错误或问题,请在评论中提出,谢谢.
2021-03-08 16:43:40
454
原创 Android网络安全之NetworkSecurityConfig
google在android p为了安全起见,已经明确规定禁止http协议额,但是之前很多接口都是http协议,我们一般是这样解决的:在res目录下创建xml目录,然后随便创建一个.xml文件,里面内容如下:<span style="color:#000000"><code><?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config clear
2021-01-28 12:47:08
1743
原创 Android Mac 获取 Jks 的 SHA1 和 PKCS12 转换
bogon:Home jonny$ keytool -list -keystore /Users/jonny/Desktop/paytm-sport-fantasy.jks输入密钥库口令: 密钥库类型: jks密钥库提供方: SUN您的密钥库包含 1 个条目fantasy, 2021-1-18, PrivateKeyEntry,证书指纹 (SHA1): 74:6D:14:06:23:1D:79:B5:80:A2:FDF:89:02Warning:JKS...
2021-01-19 16:08:57
452
原创 Android应用优化指南
1.布局优化为什么?Android系统每个16ms发出VSYNC信号,触发对UI的渲染,要想达到界面流畅,必须实现60fps,也就意味着大多数的操作必须在16ms完成.除了上面界面过于复杂导致渲染不能及时完成之外,还存在过度绘制问题.所谓过度绘制就是某个像素在同一帧的时间内被绘制多次.在多层次的UI界面中,如果不可见的UI也在进行绘制,那么这些重合区域的像素就会被绘制多次,从而浪费大量的CPU和GPU资源.过度绘制也发生在背景重叠的情况下,比如Layout中有自己的背景,同时子View中又有自己
2020-12-08 15:06:00
138
原创 Android 进阶 APP优化 包体积优化
一、谷歌官方对流畅度的解释:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms。二、IOS系统比ANDROID系统流畅的原因因为Android系统UI的框架设计的问题。在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,系统会将所有资源用于渲染UI过程。而在Android系统中UI渲染过程的优先级别却没有那么高,也就是说当你触摸Android手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,.
2020-12-02 15:31:21
560
2
原创 ReactNative与Android通信模块及核心实现类
开始之前本文前上部分主要拆解一些基础的原理,由浅到深;后半部分讲解集成模块实现,你也可以直接阅读后半部分,快速实现模块集成。文中着重在Android端帮助大家理解React Native。下方先提前介绍一些关键类。ReactActivity:默认所有的Activity都继承它。 ReactNativeHost:帮你"hold"住ReactInstanceManager。 ReactActivityDelegate:ReactActivity的逻辑代理实现。 ReactRootView:Re
2020-08-08 15:54:54
312
原创 React Native的资源的打包流程
一、引用 使用过React Native的应该知道,依赖的库都是通过npm install安装,安装后的所有源码存在于node_modules文件夹中,如果依赖的库需要原生代码的支持,需要通过react-native link实现原生代码模块的引用注册。 而手动针对Android添加过link的应该熟悉,react-native link实际上是通过脚本,在setting.gradle文件中引入模块在node_modules原生路径,然后在 app 的module的build.gradle中,通过.
2020-08-08 15:50:04
1863
原创 Android获取设备唯一ID(优化方案)
最近,因公司产品及客户需要,领导让我研究免存储设备ID,以及给出一个设备ID最佳的方案(可与存储相结合)。在研究过浏览器的fingerprient2js后,颇有心得,并且看网上似乎木有完美的解决方案,于是写了这篇文章,仅供需要的开发者参考。(该算法暂未进行验证,这里先给出一个jar包,后期我会在SDK中加入调查接口,分两个jar包(测试版和正式版),希望开发者能支持测试版,稳定后使用正式版。)在产品中,首先肯定要尽量避免权限,其次考虑卸载APP后ID不一致的问题,再就是尽量结合存储,降低卸载或重装app时
2020-06-16 17:48:30
2683
原创 Android截屏的几种实现
最近我们的APP要求需要截屏功能,网上看了看大致有一下几种实现的方式,由于我们的机器是特定的设备,(类似于广告机,已经ROOT),所以就采用最简单的方式,只需在代码中执行shell命令即可实现,下面就给大家介绍一下各种截屏的方式。方式一 public static Bitmap capture(Activity activity) { activity.getWindow().getDecorView().setDrawingCacheEnabled(true);
2020-06-16 11:34:24
1899
原创 墨菲定律(设计系统)和康威定律(系统划分)
在设计系统时,应该多考虑 墨菲定律:任何事物都没有表面看起来那么简单。 所有的事都会比你预计的时间长。 可能出错的事总会出错。 如果你担心某种情况发生,那么他就更有可能发生。在划分系统时,应该多考虑 康威定律:系统架构是公司组织架构的反映。 应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本。 如果沟通出现问题,那么应该考虑进行系统和组织架...
2020-05-06 16:06:37
208
原创 语义化版本 2.0.0
版本格式:主版本号.次版本号.修订号,版本号递增规则如下:主版本号:当你做了不兼容的 API 修改, 次版本号:当你做了向下兼容的功能性新增, 修订号:当你做了向下兼容的问题修正。先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。Alpha 版Alpha 版功能稳定,但功能可能不完整。 在版本处于 Alpha 版状态时,可以添加、移除或更改 AP...
2020-04-08 17:30:08
155
原创 神秘的Activity 的task属性android:allowTaskReparenting alwaysRetainTaskState
1.android:allowTaskReparenting 这个属性用来标记一个Activity实例在当前应用退居后台后,是否能从启动它的那个task移动到有共同affinity的task,“true”表示可以移动,“false”表示它必须呆在当前应用的task中,默认值为false。如果一个这个Activity的元素没有设定此属性,设定在上的此属性会对此Activity起作用。例如在一个应用中...
2020-04-07 17:40:46
540
原创 Android-APK签名工具-jarsigner和apksigner
一.工具介绍jarsigner是JDK提供的针对jar包签名的通用工具,位于JDK/bin/jarsigner.exeapksigner是Google官方提供的针对Android apk签名及验证的专用工具,位于Android SDK/build-tools/SDK版本/apksigner.bat不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅...
2020-03-19 14:34:41
808
Textview展示html格式代码,支持图文混排
2018-04-20
播放器demo
2012-12-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人