自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 收藏
  • 关注

原创 flutter入门

本文真对的技术特性,做了一些略全面的入门级的介绍,如果你听说过Flutter,想去了解它,但是又不想去翻厚厚的API,那么本文就是为你准备的。随着纯客户端到Hybrid技术,到RN&Weex,再到如今的Flutter技术,客户端实现技术不断前进。在之前的一个APP项目中,因为历史原因当时选择了weex,随着使用的不断深入,我们逐渐发现了weex的渲染性能问题已经成为一个隐患和瓶颈。而Flutter技术的不断成熟和流行,Flutter的良好的跨平台性和高性能优点,不断吸引着我们。

2024-03-13 22:50:20 573 1

原创 系统设计 - SDK设计流程

3. 第三步是业务功能框架设计,不要过度设计,根据具体的业务需求来设计即可,不要为了一些未来很小概率发生的需求变化提前设计。4. 第四步是基础核心库设计与开发,在核心库提炼过程中需要保证功能间互相独立,降低耦合度。5. 最后是打包与发布,可以通过 jenkins 自动获取代码和执行编译打包,最终发布到 maven 上,可以大大降低人为本地打包出错的风险。

2024-03-12 08:58:53 868 1

原创 初识PMS

PackageManagerService(简称 PMS),是 Android 系统核心服务之一,处理包管理相关的工作,常见的比如安装、卸载应用等。应用安装的时候,通过 PackageManagerService 解析 apk 的 AndroidManifest.xml 文件,提取出这个 apk 的信息写入到 packages.xml 文件中,这些信息包括:权限、应用包名、icon、apk 的安装位置、版本、userID 等等。提供一个应用程序的所有信息(ApplicationInfo)

2024-03-12 08:36:26 166

原创 AMS、PMS和WMS学习链接

WMS系列我推荐大家学习csdn传奇大佬罗升阳罗大佬的博文,罗大佬在Android方面的造诣在业界大家有目共睹的,可以说,我在学习Android过程中遇到的好多问题都是看他的博客从而获得启发的。这是一位资深级的博客专家。6. Android窗口管理服务WindowManagerService显示Activity组件的启动窗口(Starting Window)的过程分析。4. Android窗口管理服务WindowManagerService对输入法窗口(Input Method Window)的管理分析。

2024-03-12 02:06:32 352

原创 Android性能优化 - ANR的分析、监控和解决

1、首先我们搜索am_anr,找到出现ANR的时间点、进程PID、ANR类型、然后再找搜索PID,找前5秒左右的日志。2、过滤ANR IN 查看CPU信息3、接着查看traces.txt,找到java的堆栈信息定位代码位置,最后查看源码,分析与解决问题。到这里,通过上面三个步骤我们基本就能定位出来大部分ANR的来龙去脉了。下面是更多其他不同的ANR场景。

2024-03-09 18:07:28 997 1

原创 Android性能调优 - 应用安全问题

内存优化:1.布局渲染:Android屏幕 1000ms60帧的频率来进行刷新,如果16ms没有刷新完一帧,那就会让用户感觉到卡顿;布局优化上解决方案是:1. 优化布局层级2. 在onDraw的时候避免做耗时操作,同时尽量不要在ondraw中创建局部对象,onDraw频繁调用会产生大量的临时对象占用过多内存导致多次gc,降低性能;2.内存方向1. 内存泄漏相关可以参看我的其他博客内容2. 内存溢出1.如果内存泄漏过多,很多对象未被回收,导致内存占用太大,内存溢出;2.大...

2024-02-09 12:17:15 1050 2

原创 RxJava常用的操作符

ZipZip: 把两个流返回结果一起调用;Zip(a,b,new Function<>(a的类型,b的类型,结合结果的返回类型));ZipWith:把一个流和另一个流的结果一起调用;a.ZipWith(b,new Function<>(b的类型,结合结果的返回类型));...

2024-02-09 12:14:41 82

原创 git 常见分支管理命令

拉取项目: git clone 拉取远程仓库提交分支: Android Studio中 commit 以及 commit&push: 一个是推到本地缓存区,一个是推到远端; 两者都是会先进行 git add(修改文件) 操作;创建分支: Android Studio中 如果要创建关联了远端的本地分支,对远程分支进行checkout即可,,如果有smartCheckout提示,一般需要先缓存本地修改; 如果要创建远端分支,在对应代码管理平台操作,再重新git pull更新即可;创建无关联任何远端的本

2023-03-23 11:02:17 291

原创 android 系统版本差异

Android5.0:Android运行时由Android核心库集和Dalvike虚拟机改成Android核心库集和ART(Android Runtime)模式Android6.0:动态权限Android7.0:在官方7.0的以上的系统中,尝试传递 file://URI可能会触发FileUriExposedException。要应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权的最简单方式是使用 FileProvider类。Android8.0:And

2023-03-23 10:28:18 422 1

原创 Android MMKV使用及 MMAP原理

什么是MMKVMMKV——基于 mmap 的高性能通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。MMKV 是基于 mmap 内存映射的移动端通用 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。通过 mmap 内存映射文件,提供一段可供随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。优点• MMKV 是基于 mmap 内存映射的 k

2023-03-22 18:05:36 742

原创 Application 初始化流程

Application 的 onCreate 和 attachBaseContextApplication 的 onCreate 和 attachBaseContext 是 Application 的两个回调方法,通常我们会在其中做一些初始化操作。onCreate 和 attachBaseContext 顺序: Application 的 attachBaseContext 在 onCreate 之前执行。handleBindApplicationApp 的 application 创建是在 A

2023-03-22 16:37:00 483

原创 Android性能调优 - 省电优化

省电:通过工具Battery Historian查看到:耗电大头: 屏幕、网络、cpuled/oled屏幕显示:降低亮度,开深色模式;锁屏间隔缩短到 ;亮屏需要一直持有唤醒锁,还有gps定位也需要用到唤醒锁;网络: 常用的网络优化措施(各部门宣讲)1.使用缓存。2.合并网络请求,减少请求次数3.实时的信息上报改为非实时上报4.请求一个图片时进行压缩5. 使用webp图片cpu:一、避免wakelock不正确使用(部门宣讲)。WakeLock 用来阻止 CPU、屏幕

2023-03-04 23:02:15 676

原创 启动框架 Anchors接入和分析

从哪下手整个冷启动过程中,系统方法我们无法进行优化,主要需要优化的是系统暴露出来的一些生命周期方法,从Application的attachBaseContext开始,到启动页Activity或者首页Activity的onResume结束,甚至直到Activity的界面绘制结束。优化的目的就是使这个过程尽量快,不要出现卡顿。其中最重要的就是Application中的onCreate方法了。初始化任务分析• 将初始化任务按两个维度区分:是否耗时&是否必要。必要且耗时的,考虑使用其他线程来初始化(比如Tin

2023-03-02 20:39:16 430

原创 Android性能调优 - 存储优化、Apk包体积优化和网络优化

2023-02-26 21:59:57 152

原创 Android性能调优 - 启动优化

一、APP启动优化1、 你对 APP 的启动有过研究吗? 有做过相关的启动优化吗?程序员:之前做项目的时候,我发现程序在冷启动时,会有 1s 左右的白屏闪现,低版本是黑屏的现象,在这期间我通过翻阅系统主题源码,发现了系统 AppTheme 设置了一个 windowBackground ,由此推断就是这个属性捣的鬼,开始我是通过设置 windowIsTranslucent透明属性,发现虽然没有了白屏,但是中间还是有一小段不可见,这个用户体验还是不好的。最后我观察了市面上大部分的 Android 软件在冷

2023-02-26 21:37:56 435

原创 Android性能调优 - 稳定性优化

1、你们做了哪些稳定性方面的优化?随着项目的逐渐成熟,用户基数逐渐增多,DAU持续升高,我们遇到了很多稳定性方面的问题,对于我们技术同学遇到了很多的挑战,用户经常使用我们的App卡顿或者是功能不可用,因此我们就针对稳定性开启了专项的优化,我们主要优化了三项:Crash专项优化(看第二、四点)性能稳定性优化(看第二点)业务稳定性优化(看第三点)通过这三方面的优化我们搭建了移动端的高可用平台。同时,也做了很多的措施来让App真正地实现了高可用。2、性能稳定性是怎么做的?全面的性能优化:启动速度、内

2023-02-26 21:26:31 373

原创 RecycleView详解

四级缓存和流程说一下。滑动10个,再滑回去,bindview可以是19次调用,可以是16次调用。缓存的其实就是缓存item的view,在Recycleview中就是viewholder。cachedView就是mCacheViews缓存区中的view,是不需要重新绑定数据的。

2023-02-25 12:51:24 552

原创 FrameLayout LinearLayout RelativeLayout 原理

2023-02-24 15:57:59 132

原创 值传递和引用传递

2023-02-24 15:07:01 301

原创 View的scrollto和scrollBy

scrollTo(x, y)标识移动到一个具体的坐标点(x, y),而scrollBy(x, y)表示移动的增量为x、y。如果传了xy值进去,scrollto触发一次和触发多次的结果是一样的,因为xy是最终移动到的目标点坐标;而scrollby每次触发都会移动坐标,移动偏量为x和y;看下移动的坐标系:向右和向下移动是负数,向上和向左是正数;...

2021-04-09 15:56:04 144

原创 HashMap和ArrayMap SparseArray

ArrayMap结构:存放Entry键值对的数组结构; 而hashmap是数组+链表结构;arraymap和hashmap区别:查找效率:hashmap通过hashcode计算的index直接拿到值;而arraymap是通过二分法查找拿到值; 因此数据量大的时候用hashmap;构造源码:public class ArrayMap<K, V> extends AbstractMap<K, V> implements Map<K, V&...

2021-04-01 12:46:05 341

原创 海量数据问题处理

参考https://blog.csdn.net/qq_41058526/article/details/89313852

2021-03-26 15:46:37 80

原创 位运算

负数补码:负数取反加11.判断奇偶x & 1==1 或者 x ^ 1 ==12.获取x的第n位值(x>>n)&13.把x最低位的1置为0x = x&(x-1)(因为x和x-1一定一个奇一个偶,最低位一定会被置0)4.拿到最低位的1x = -x&x (运用补码知识)5.仅将第n位置1x | (1<<n)6.仅将第n位置0x |(~(1<<n))...

2021-03-24 14:09:32 63

原创 强记知识点

Android:Android系统结构:Android系统体系结构(采用软件叠层,降低系统5层之间的耦合性):1. 应用程序层--------就是手机上的App2.应用程序框架3.函数库-------------里面都是C/C++库,不能直接调用这些库,但是通过应用程序框架可以运行4.Android运行时---------分为两部分1.Android核心库集,即Java语言核心库所使用的大部分功能...

2021-03-17 12:45:41 761 1

原创 Android APK打包流程

打包流程图:流程:1. 打包资源文件,生成R.java文件打包资源的工具是aapt,在这个过程中,项目中的AndroidManifest.xml文件和布局文件XML都会编译,然后生成相应的R.java,存放在APP的res目录下的资源,该类资源在APP打包前大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。Android应用在编译过程中aapt工具会对资源文件进行编译,并生成一个res.

2021-03-16 15:31:26 466

原创 LeakCanary源码分析

主要原理:1.WeakReference 创建时,传入一个 ReferenceQueue对象。当被WeakReference 引用的对象的生命周期结束,一旦被 GC 检查到,GC 将会把该对象添加到 ReferenceQueue 中,待ReferenceQueue处理。当 GC 过后对象一直不被加入 ReferenceQueue,它可能存在内存泄漏。每当一个Activity页面调用onDestroy时候,获取到这个Activity去检测这个Activity是否真的被系统GC。如果存在内存泄漏,说明有

2021-03-15 17:27:53 127

原创 JsBridge原理

JsBridge是Android Native原生和H5之间通信的桥梁,而且这种通信是双方互通的;H5调用Native方法:1.从H5页面通过JSBridge触发一个url scheme; (url scheme具体作用:可以用系统的OpenURI打开一个类似于url的链接(可拼入参数),然后系统会进行判断,如果是系统的url scheme,则打开系统应用,否则找看是否有app注册这种scheme,打开对应app);2.Native页面捕获对应的url scheme,并对其进行分析...

2021-03-15 16:00:02 226

原创 Glide源码分析

常见用法:进阶点的:常见图片处理库和Glide的区别:Glide: 图片的异步加载(基础功能) 支持设置加载尺寸、设置加载中以及加载失败图片、设置加载动画、设置图文混排 多样式的媒体加载(设置缩略图支持:先加载缩略图 然后在加载全图) 支持设置磁盘缓存策略、设置跳过内存缓存、清理缓存 通过设置绑定生命周期,更好的让加载图片的请求的生命周期动态管理起来; 优点:支持多样化媒体加载 Glide 不仅是一个图片缓存,它支持 Gif、We.

2021-03-14 22:47:40 354

原创 从浏览器输入网址,到网页打开,全过程解析

转载:https://blog.csdn.net/designerXie/article/details/84787795说到一个经典面试题:从浏览器地址栏输入网址,到网页彻底打开,中间经历了什么。在结合曹大给的分析和自己查阅相关资料。遂整理出了这篇详细的文章供大家参考。背景分析:这题考查的是面试者对整个上网概念以及背后流程的了解。而俗称的上网大致分为三个方面:1:客户端(也称用户端,较常用的就是万维网使用的网页浏览器)。2:网络传输层(两台计算机经过计算机网络进行的数据通信)。3:服务

2021-03-09 10:34:59 2055

原创 应用启动流程 Window创建流程 安卓系统启动流程(待补充)

点击app的启动图标时,Android系统会从Zygote进程fork创建出一个新的进程分配给该应用;之后会依次创建和初始化Application类,创建MainActivity类,加载主题样式Theme中背景等属性;然后再inflate布局,当oncreate/onstart/onresume方法都走完了之后,最后才对contentview进行measure/layout/draw显示再界面上,到此,应用的第一次启动才算完成;...

2021-02-19 14:24:12 299 1

原创 设计模式之策略模式

策略模式作用定义比较笼统(参考下面举例感受优劣):如果不用策略模式,去定义一些出行方式:(不好处理新增出行方式情况,需要修改类结构)但是用了策略模式:使用方法:(就算新增了出行策略,可不改变类结构实现)...

2021-02-05 14:40:57 122 1

原创 设计模式之Build模式

Build模式作用:让对象的创建过程变成链式的,增加代码可读性;在Android中的常见用例:对话框的创建,Okhttp的使用没有用build模式一般会这样去构建对象类:缺点:在构建对象的时候,代码可读性差;用了Build模式去构建对象类...

2021-02-04 16:34:53 277

原创 Android apk瘦身

1.代码混淆(代码混淆作用:将有实际意义长字符串改为无意义短字符串,达到瘦身和增加反编译难度目的)Android平台的混淆原理是把代码中原来有具体含义的包名,类名,变量名,方法名等名称全部替换成按顺序排列的无意义的英文字母a、b、c;这样就算反编译出来的代码,也比较难理解;但是混淆后可能会造成编译不通过,需要进行混淆保护:2.采用SVG图片资源SVG:可缩放矢量图,和位图不同 它不会因为图片缩放而导致图片质量下降,且内存占用小;3.PNG JPEG图片转为WebP格...

2021-01-19 16:03:11 119

原创 Android 常见安全问题

1.组件暴露:像比如ContentProvider,BroadcastReceiver,Activity等组件有android:exported属性;如果是私有组件android:exported= “false”;如果是公有组件android:exported= “true” 且进行权限控制;2.Log敏感信息泄漏:3.权限申请如果targetsdk低于23(Android M),在清单文件中写的权限都默认可用;如果超过23,就算清单文件中声明了,也得在代码中动态进行权限申请;..

2021-01-19 15:51:34 234

原创 Android 上下文Context

1.Context(上下文环境)的概念和作用定义:1.应用程序环境的全局信息的接口2.是由Android系统提供的抽象类作用:访问应用程序的资源(string drawble)和类(new 控件),以及进行一些程序操作例如启动活动,广播等;2.Context继承结构:从结构上来看:Context分为了ContextWrapper封装类和ContextImpl实现类;ContextWrapper封装类有三种类型的子类:Application Service Con.

2021-01-18 11:03:26 160

原创 Android Application作用

Android系统会为每个程序运行的时候创建唯一的Application类,而且Application类对象的生命周期等于程序的生命周期;1.重写处理Application类的生命周期事件:onCreate():在应用程序创建的时候被调用,可以得到 Application 的单例,可以实现这个这个方法来创建和实例化变量或共享资源。onLowMemory(),onTrimMemory()可以在低内存的时候清除缓存或释放资源;2.传递数据:在Application类中定义存和取方法:.

2021-01-15 17:00:06 555

原创 Android 持久化存储方式

1.SharedPreferencesSharedPreferences是一种轻量级的存储方式,通过存为键值对保存为xml文件来存放读取数据,文件路径在data/data/程序包名/share_prefs目录下,只适合存储一些简单参数配置;2.文件存储(三级缓存中的磁盘缓存)网络下载文件后,保存到文件缓存中。最好的三级缓存策略:先读取内存缓存(LruCache算法,很多框架都封装过),没有找到再查找磁盘缓存,最后没找到再请求网络;。。IO操作上述是读取内存卡中的缓存,如果读取外部..

2021-01-15 14:17:43 306

原创 onSaveInstanceState 和 onRestoreInstanceState

1.onSaveInstanceState 和 onRestoreInstanceState基本作用:onSaveInstanceState是用来保存UI状态的,可以在activity被杀死之前保存要保留的数据,一般在onStop或者onPause之前触发;onRestoreInstanceState是用来恢复状态的,...

2021-01-12 15:12:11 509

原创 java 编译时与运行时  .class .dex文件

编译时编译时将代码翻译成机器能够看懂的代码,通过Java编译器(javac)翻译成jvm能识别的字节码文件(.class文件),可以检查出语法,关键字占用等错误,为了后面类加载做准备,不会出现分配内存的操作;运行时:将编译后储存在磁盘上的字节码文件(.class)通过在通过类加载器等一系列运行操作,这个过程发生的错误是无法在编译前知道的,是不可预知的,只有在运行后才能知道;java中涉及到以上知识点的:方法重载(编译时多态): 编译器能根据方法的参数来选择使用哪个方法;.

2021-01-10 16:06:26 222

原创 Android性能调优 - 内存优化的OOM、卡顿和 绘制优化

1.布局渲染:Android屏幕 1000ms60帧的频率来进行刷新,如果16ms没有刷新完一帧,那就会让用户感觉到卡顿;布局优化上解决方案是:优化布局层级在onDraw的时候避免做耗时操作,同时尽量不要在ondraw中创建局部对象,onDraw频繁调用会产生大量的临时对象占用过多内存导致多次gc,降低性能;2.内存方向内存泄漏相关可以参看我的其他博客内容内存溢出...

2020-12-28 16:47:25 782 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除