- 博客(38)
- 资源 (2)
- 收藏
- 关注
原创 Android性能优化 - ANR
文章目录1. ANR是什么2. ANR类型1. ANR是什么ANR(Application Not responding),就是应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。我们开发时手机性能比较好,还不一定会遇到ANR,但是上线后,用户的手机不一定好,处理不过来就容易报ANR了,还有就是断点调试,卡在那,也会报ANR,继续等待就行了。2. ANR类型1.输入事件超时 (KeyDispatching
2023-06-25 21:08:56
483
原创 Matrix提示 Need zipalign apk but D:\Android\android-sdk/build-tools/29.0.3/zipalign is not exist!
提示 Need zipalign apk but D:\Android\android-sdk/build-tools/29.0.3/zipalign is not exist!A problem occurred configuring project ':app'.> Could not create task ':app:removeDebugUnusedResourcesV2'. > Need zipalign apk but D:\Android\android-sdk/b
2023-06-25 21:04:54
590
2
原创 Android toolchain - develop for Android devices (Android SDK version 30.0.2)
如果在搭建Flutter开发环境时,遇到 Android toolchain - develop for Android devices (Android SDK version 30.0.2) 的问题。很好解决,已经给出提示了,执行这两段命令即可,不同的机子可能不一样。比如第一个命令,先切换到sdkManger的位置,然后在执行命令 sdkmanager --install “cmdline-tools;latest”。再执行命令 flutter doctor --andro..
2021-10-04 00:39:29
5187
原创 AndroidTest 获取 context 的正确方法
文章目录1.Android 单元测试2.AndroidTest获取context 为何为空2.1 context可以获取到,但是为空2.2 ApplicationProvider 源码2.3 Instrumentation源码3.正确获取方法3.1 查看官网文档3.2 创建application1.Android 单元测试AndroidX Test 的 JUnit4 规则可以查看官方文档,Test怎么写。2.AndroidTest获取context 为何为空2.1 context可以获取到,但
2021-08-05 09:38:03
1427
原创 Android LiveData实现原理
文章目录1.了解LiveData2.简单使用1.了解LiveDataGoogle LiveData 概览LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。LiveData本身是观察者,观察组件的Lifecycle,也是被观察者,数据变化时要通知数据的观察者。先了解
2021-06-08 11:31:22
375
原创 Android Lifecycle实现原理
文章目录1.Lifecycle了解2.生命周期获取对比2.1 之前的生命周期获取2.2 Lifecycle回调生命周期1.Lifecycle了解到官方文档下看 Google Lifecycle,Lifecycle的作用是:生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。我们之前开发,因为Activity 或者是 Fragment 的生命周期问题而间接引起的内存问题挺多
2021-06-06 18:27:23
1421
5
原创 Android性能优化 Java Crash监控
文章目录1.什么是Crash2.Java层Crash1.什么是CrashCrash也就是APP代码异常奔溃,从而导致App闪退,也许我们在开发的时候测试一切正常,但是在线上,用户量多起来之后,什么五花八门的机子都有,多多少少会发生Crash。当App奔溃后,我们应及时记录下问题,保存到文件,待下次启动app时,再上传服务器,然后分析错误日志,修改问题。Android 有Java层的Crash,还有Native层Carsh,这次先了解怎么拿到Java层的Crash。2.Java层Crash
2021-06-05 01:03:09
269
原创 Fragment 官方懒加载源码分析
文章目录1.Fragment懒加载1.1 什么是预加载1.2 什么是懒加载1.Fragment懒加载1.1 什么是预加载ViewPager搭配Fragment使用时,Fragment 在没有显示的时候,其实就已经初始化操作了,这是为了用户更好的体验,在滑动ViewPager时,浏览当前页面,当左右其实已经初始化好了。ViewPager默认是预加载一页,就是左右各一页,可以使用 setOffscreenPageLimit 设置,但最少一页。 //默认一页 private static f
2021-05-31 12:18:47
295
原创 Fragment 生命周期源码分析
文章目录1.supportFragmentManager1.1 getSupportFragmentManager1.2 FragmentController类1.3 FragmentHostCallback类2.beginTransaction2.1 FragmentTransaction类2.2 Op类2.3 BackStackRecord类3.add,hide,replace,remove3.1 封装,addOp4.commit4.1 四种提交方式4.2 提交事务4.3 handler 发送4.4 执
2021-05-29 00:04:31
505
1
原创 Android Handler 从使用到进阶
文章目录1.Handler2.Handler简单使用2.1 发送消息2.2 使用3.子线程中使用3.1 子线程直接创建Handler错误3.2 主线程默认初始化Looper3.3 Handler构造方法查看3.4 子线程正确的创建4.Message4.1 基本参数4.2 享元模式obtain()4.3 回收recycle()5.Looper5.1 ThreadLocal5.2 初始化prepare(),为何只能调用一次5.3 绑定当前线程,创建消息对列5.4 拿到当前线程的looper5.5 loop()5
2021-04-30 18:24:34
1379
3
原创 Android 开发也要掌握的Java知识 -ThreadLocal
文章目录1.ThreadLocal了解2.ThreadLocal源码2.1 构造方法2.2 ThreadLocalMap类2.2.1 Entry2.2.2 构造方法2.2.3 set(ThreadLocal<?> key, Object value)2.2.4 setInitialValue()2.2.5 getEntry(ThreadLocal<?> key)2.2.6 整理扩容2.3 set(T value)2.3.1 set(this, value)2.3.2 createM
2021-03-15 16:24:00
211
1
原创 Android 开发也要懂得数据结构 - SparseArray源码
在之前分析 HashMap 就知道当容量达到 75% 时就需要扩容,那也就意味着 25% 的内存空间啥也不放,浪费掉了,为了解决这个问题,就有了 SparseArray。本文章使用的是 JDK1.8 ,不同版本源码有差异。可先食用 Android 开发也要懂得数据结构 - HashMap源码 。1.SparseArray特点SparseArray的结构是 双数组 ,就是key和value都是数组,下标一一对应。SparseArray虽然是 key-valye 结构,但是key只能是 int .
2021-01-28 16:58:22
177
原创 Android性能优化 - 卡顿和布局优化
文章目录1.卡顿分析1.1 刷新率1.2 PerfDog2.布局优化2.1 过度绘制2.2 解决过度绘制3.其他优化最后1.参考文章布局可以说是APP最重要的一项了,用户感知极强,无论你的代码写的如何,用户也不知道,用户只能看到和操作APP,更漂亮合理的布局,更流畅的体验才是好APP。比如微信,操作起来卡,用户只会觉得是手机不行,而不会是微信不行,但其他APP卡,用户就觉得是APP不行,而不是手机不行。┓( ´∀` )┏1.卡顿分析1.1 刷新率大多数用户感知到的卡顿等性能问题的最主要根源都
2021-01-13 10:04:30
648
原创 Android性能优化 - apk包体优化
文章目录1.了解apk包结构Android Size Analyzer 下载地址Android Size Analyzer 云盘链接下载,提取码:c777 随着APP迭代,业务逻辑增加修改,没用的资源可能越来越多,导致包体越来越臃肿,消耗更多的手机资源。 应用的包体大小影响会很多,比如客户看了就不想安装,比如发包上传时等待时间久。因此我们有必要学习怎么清除无用资源,不影响使用的情况下尽可能压缩资源。1.了解apk包结构...
2021-01-06 17:48:48
565
2
原创 Android性能优化 - 启动速度优化
做开发除了实现功能,还要注重优化,性能优化包括的东西还是非常多的,包体大小、启动速度、内存、数据结构、ANR、卡顿等等。用户都希望APP按下,就能马上进入首页使用,手机性能很重要,但不能要求用户换手机,于是我们就需要APP想办法优化启动的速度,不然这APP可能会被删掉。1.启动的状态我们APP不是微信那种体量,所以几乎不可能有厂商给我们搞特殊,一直挂在那,大多数情况下都是冷启动,优化也是主要优化冷启动。冷启动冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应.
2021-01-04 01:17:12
773
原创 Android 开发也要懂得数据结构 - HashMap源码
文章目录1.HashMap特点2.HashMap 的继承关系3.HashMap常用方法3.1 构造方法HashMap不仅是Android开发中常用的数据结构,面试也是高频出现,所以了解一下源码还是非常必要的。本文章使用的是 JDK1.8 ,不同版本源码有差异。1.HashMap特点Collection 是集合,有数组(ArrayList)查找快增删慢,有链表(LinkList)增删快查找慢,Map 就是数组与链表的结合体,结合了两的优点。HashMap 的数据关系是 key 到 value
2020-12-25 12:51:28
512
1
原创 Android 开发也要懂得数据结构 - LinkList源码
文章目录1.LinkList特点2.LinkList的继承关系3.LinkList的常用方法3.1 构造方法3.2 普通增加数据 add(E e)3.3 在索引位置插入数据 add(int index, E element)3.4 默认删除 remove()3.5 删除索引位置 remove(int index)3.6 删除指定元素 remove(Object o)3.7 修改元素 set(int index, E element)3.8 长度 size()3.9 清空链表 clear()3.10 找到元素
2020-12-17 16:00:11
431
原创 Android Studio安装Protocol Buffer Editor
文章目录1.自动提示安装插件2.没有提示安装的情况3.上网查找插件下载4.安装重启即可5.总结Android 开发IM有时需要用到 Protocol Buffers,而这个插件挺多小伙伴找不到,这篇文章能解决protobuf插件安装问题。Protocol Buffer Editor插件下载1.自动提示安装插件打开proto文件,如果有提示安装插件,那点击安装插件就行了2.没有提示安装的情况像这种情况就没有提示安装,就是没有高亮显示Android Studio也搜索不到3
2020-12-15 12:04:05
504
原创 Android 开发也要懂得数据结构 - ArrayList源码
文章目录1.ArrayList特点2.ArrayList的继承关系3.ArrayList的常用方法3.1 创建初始化3.2 尾部插入 add(E e)3.3 中间插入 add(int index, E element)3.4 扩容 grow(int minCapacity)3.5 删除索引位置 remove(int index)3.6 删除指定元素 remove(Object o)3.7 修改元素 set(int index, E element)3.8 内容长度 size()3.9 判断是否为空 isEm
2020-12-09 17:52:13
237
原创 Android 自定义ItemDecoration-实现分组吸顶效果
文章目录1.了解 RecyclerView.ItemDecoration1.onDraw方法2.onDrawOver方法3.getItemOffsets方法2.实现分组吸顶效果1.重写getItemOffsets方法2.绘制分组头跟分隔线3.绘制吸顶效果Github源码地址码云源码地址使用自定义ItemDecoration 来实现RecyclerView的分组头,还有吸顶的效果1.了解 RecyclerView.ItemDecoration1.onDraw方法我们看源码的注释,看看on
2020-09-23 15:17:45
539
原创 Android view的测绘练习-流式布局-FlowLayout
文章目录1.流式布局分析1.每一行的宽高2.子view测量3.FlowLayout的大小(onMeasure)4.布局位置(onLayout)2.代码1.FlowLayout的onMeasure2.FlowLayout的onLayoutAndroid View的测量 最好先了解一下FlowLayout源码这次要实现的功能先看一下1.流式布局分析1.每一行的宽高换行条件就是,已使用的宽度 + 当前子view的宽度 + 子view之间的间隔 + FlowLayout的 padd
2020-09-20 16:00:54
164
原创 Android View的测量参数
文章目录1.LayoutParams布局参数1.了解LayoutParams2.优先级问题3.LayoutParams参数4.addView5.generateDefaultLayoutParams方法6.checkLayoutParams方法2.MeasureSpec1.测量View大小(onMeasure)2.MeasureSpec参数3.获取参数4.三种测量模式5.获取子View的MeasureSpec(getChildMeasureSpec)6.确定View大小(onSizeChanged)7.获取
2020-09-18 18:07:51
299
1
原创 Android ShapeableImageView使用
文章目录1.添加material:1.2.0依赖2.在style.xml文件里面添加style3.布局xml直接出效果4.描边问题5.花里胡哨的样式5.参考文章前段时间Google推送了文章 , Android Material 组件 1.2.0 现已发布里面就有ShapeableImageView,不用像以前再写shape1.添加material:1.2.0依赖 implementation 'com.google.android.material:material:1.2.0'2
2020-09-11 17:39:02
6661
2
原创 Android - 利用注解加Rxjava解决view点击抖动
RxJava也出来很久了,最近学了一招,用Rxjava解决View点击抖动问题(指定时间内防止快速点击),需要自定义Observable来实现。如果每次都写Rxjava那一堆那代码给View加,那岂不是一堆重复代码,于是就想到用注解,虽然性能上退化了,但好看一些。Android 开发也要掌握的Java知识 - Java注解1.自定义一个Observable,每次点击view,发送事件去下游public class RxView { static final String TAG = R.
2020-08-20 18:03:04
278
原创 Android 开发也要掌握的Java知识 - Java注解
文章目录1.注解的定义2.注解是什么样的3.注解的分类以及作用4.注解写法5.注解使用5.1 过时标记5.2 语法检查5.3 findViewById5.4 View的Onclick6.结尾Android开发中大量的使用了注解,开源框架也大量使用,我们自己虽然自定义的注解不多,但也要了解基本的知识。1.注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的
2020-08-17 01:16:42
200
原创 Android 开发也要掌握的Java并发知识 - 多线程基础2
文章目录1.操作系统层面,五种状态2.Java层面,六种状态3.不同状态关系4.不同状态调用的方法5.运行代码尝试一下线程的状态,有五种跟六种的说法,两种都对,其实是站在不同的层面来看的。Bilibili学习网站,有非常优秀的学习视频全面深入学习java并发编程,java基础进阶中级必会教程Android 开发也要掌握的Java并发知识 - 多线程基础11.操作系统层面,五种状态2.Java层面,六种状态这里主要讲java的六种状态:初始(NEW):新创建了一个线程对象,但还没
2020-08-15 16:38:00
149
原创 Android 开发也要掌握的Java并发知识 - 多线程基础1
文章目录Android 开发也要掌握的Java并发知识 - 多线程基础1.线程创建的两种方法:2.线程的启动运行3.线程的停止4.线程休眠Android 开发也要掌握的Java并发知识 - 多线程基础Android开发也要掌握基本的多线程知识,除了开发中经常用到,面试也老喜欢问这些问题,所以就整理一份多线程知识,分享出来。1.线程创建的两种方法:继承Thread类,重写run方法实现Runnable接口,创建runnable的实体对象,传给Thread来运行详情可查看Thread源码注释
2020-08-15 15:27:50
146
原创 Android studio 查看字节码 ASM Bytecode Viewer
文章目录1.ASM Bytecode Viewer干什么的?2.下载地址3.安装4.使用1.ASM Bytecode Viewer干什么的?ASM Bytecode Viewer 是Android Studio的插件能查看字节码2.下载地址可能访问不了ASM Bytecode Viewer我帮你下载好了上传优快云了3.安装打开Android Studio,FIle -> Setting -> Plugins -> Install Plugins from Di
2020-07-31 23:53:29
3553
3
原创 Android 开发也要掌握的Java知识 - Java 泛型擦除
文章目录1.什么是泛型擦除2.编译期如何擦除泛型:3.泛型擦除也会有副作用4.这里放黑马教程的截图,可以在哔哩哔哩上免费观看5.验证泛型擦除6.验证泛型桥接7.参考文章1.什么是泛型擦除因为Java 泛型是1.5版本才引入的,为了向下兼容,其实虚拟机是不支持泛型的,Java里面是伪泛型机制Java在编译期就擦除了所有泛型信息,这样Java就不需要产生新的类型到字节码,所有泛型类型最终都是一种类型2.编译期如何擦除泛型:1.检查泛型类型,获取目标类型2.擦除类型变量,替换为限定类型2.1如果
2020-07-31 23:00:20
203
原创 Android 开发也要掌握的Java知识 - Java泛型
文章目录1.Java泛型有什么用?为啥要使用泛型?2.泛型通配符3.泛型怎么写,规则有哪些4.参考文章1.Java泛型有什么用?为啥要使用泛型?Java中数组的类型是定义的时候就写死了,后面添加数据的时候,就必需是定义好的类型,这样要求严格的好处就是不会出错,不会再后面使用时出错。而使用List,可以用Object对象(不定义类型或者是定义Object类型),这样什么都能往里面放,但是使用的时候,遍历的时候,要么出现类型转化异常,要么每个都判断类型。使用List的时候,如果定义时写的是String
2020-07-31 22:56:48
157
原创 RecyclerView拖拽移动,长按小图标拖拽,侧滑删除
RecyclerView拖拽移动,长按小图标拖拽,侧滑删除Github源码Android RecyclerView出来也很多年了,是非常成熟的控件,Github上工具一堆,做的非常全,侧滑、拖拽、动画都封装好的,但是工作需求,这种小功能就不用别人的,自己学习一下,写一个简单的代码即可实现。RecyclerView的拖拽跟侧滑删除,其实就是使用 ItemTouchHelper 来实现,而我们只要写一下CallBack 继承 ItemTouchHelper.Callback(),重写里面的
2020-07-31 22:54:21
1019
原创 Android Wifi连接控制、TCP、UDP通信,6.0以上适配
本文章包含内容Wifi连接控制、Wifi广播接收,适配了Android6.0以上的版本Wifi下的TCP通信Wifi下的UDP通信Github项目地址码云项目地址最近公司要开发智能家居,APP要作为遥控器和控制中心,其中的原理就是智能设备开机先作为一个热点,发射Wifi信号,然后手机连上这个热点(Wifi控制),手机和智能设备建立了连接后,将家里路由器wifi的账号密码通过TCP协议,Socket...
2018-03-24 08:16:30
2404
2
原创 Android 短信链接打开APP
短信链接跳转APP简书:Android 短信链接打开APP平时我们会收到广告短信,比如某东,某宝,里面附加着链接,当你点开链接(手机自带的浏览器),发现浏览器打开后,等一下下,就会打开对应的APP,直接到广告相应的页面。Android端的代码1.从简单的开始,第一个启动的Activity先来处理<activity android:name=".activity.ActivityFirst"&...
2018-03-13 14:42:45
2294
原创 Android RecyclerView加载复杂布局
用一个RecyclerView实现多种复杂布局,复用机制要保存简书:Android RecyclerView加载复杂布局demo源码挂载在码云上面。https://git.oschina.net/GoodBaoZi/FuZaJieMianRecyclerViewFuYong/tree/master在开发过程中,特别是电商类的,有时要开发一个很复杂的页面,但是又要性能好,不怎么出现内存问题,所以今天...
2018-03-13 14:25:40
1375
原创 Android 7.0 适配相机及裁剪图片
Android 7.0调用相机及裁剪图片,还有动态权限简书:Android 7.0 文件读取适配,及适配相机及裁剪图片Demo挂载在码云上码云链接华为荣耀V8和小米5测试通过,其他机子没机会测试。。。。因为公司项目需要能修改头像功能,之前的测试机一直都是Android 5.1的机子,一直没问题,突然有一天,小米5升级到Android 7.0,华为机子也升级上去,然后就一直奔溃,然后就开始上网查资...
2017-03-09 21:56:30
5068
1
原创 无限循环的Viewpager
网络上有很多无线循环的Viewpager,但是学习嘛,就自己写了一个无线循环的ViewPager。思路一网上有一种是真正意义的无限循环,比如View0,View1,View2,View3, 4个View,在View0左侧加一个View3,View3右侧加一个View0,就成了View3-2, View0,View1,View2,View3, View0-2,
2016-08-19 17:26:23
924
原创 Android Studio 开发工具一些入门的小设置
Android Studio 是目前开发Android的不二之选,2.0以后超级好用,虚拟机比以前快多了,不过我还是喜欢真机调试,有一些打电话、发短信其实还是要用到自带的虚拟机。我也是第一次分享内容,其实大部分都是网络上已经有了的解决方案,我收集了一些常用的。
2016-07-07 17:04:51
649
asm-bytecode-intellij-7.2.zip
2020-07-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人