自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (2)
  • 收藏
  • 关注

原创 Android studio 新版本 NewUI toolbar显示快捷按钮

新版Android Studio 设置显示快捷按钮

2024-05-09 11:02:12 314

原创 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 361

原创 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 378 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 4571

原创 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 1071

原创 Android LiveData实现原理

文章目录1.了解LiveData2.简单使用1.了解LiveDataGoogle LiveData 概览LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。LiveData本身是观察者,观察组件的Lifecycle,也是被观察者,数据变化时要通知数据的观察者。先了解

2021-06-08 11:31:22 317

原创 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 1221 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 213

原创 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 239

原创 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 419

原创 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 735 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 145 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 131

原创 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 578

原创 Android性能优化 - apk包体优化

文章目录1.了解apk包结构Android Size Analyzer 下载地址Android Size Analyzer 云盘链接下载,提取码:c777 随着APP迭代,业务逻辑增加修改,没用的资源可能越来越多,导致包体越来越臃肿,消耗更多的手机资源。 应用的包体大小影响会很多,比如客户看了就不想安装,比如发包上传时等待时间久。因此我们有必要学习怎么清除无用资源,不影响使用的情况下尽可能压缩资源。1.了解apk包结构...

2021-01-06 17:48:48 463 2

原创 Android性能优化 - 启动速度优化

做开发除了实现功能,还要注重优化,性能优化包括的东西还是非常多的,包体大小、启动速度、内存、数据结构、ANR、卡顿等等。用户都希望APP按下,就能马上进入首页使用,手机性能很重要,但不能要求用户换手机,于是我们就需要APP想办法优化启动的速度,不然这APP可能会被删掉。1.启动的状态我们APP不是微信那种体量,所以几乎不可能有厂商给我们搞特殊,一直挂在那,大多数情况下都是冷启动,优化也是主要优化冷启动。冷启动冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应.

2021-01-04 01:17:12 667

原创 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 209 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 187

原创 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 424

原创 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 182

原创 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 447

原创 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 117

原创 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 230 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 6567 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 244

原创 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 143

原创 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 107

原创 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 114

原创 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我帮你下载好了上传CSDN了3.安装打开Android Studio,FIle -> Setting -> Plugins -> Install Plugins from Di

2020-07-31 23:53:29 3167 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 170

原创 Android 开发也要掌握的Java知识 - Java泛型

文章目录1.Java泛型有什么用?为啥要使用泛型?2.泛型通配符3.泛型怎么写,规则有哪些4.参考文章1.Java泛型有什么用?为啥要使用泛型?Java中数组的类型是定义的时候就写死了,后面添加数据的时候,就必需是定义好的类型,这样要求严格的好处就是不会出错,不会再后面使用时出错。而使用List,可以用Object对象(不定义类型或者是定义Object类型),这样什么都能往里面放,但是使用的时候,遍历的时候,要么出现类型转化异常,要么每个都判断类型。使用List的时候,如果定义时写的是String

2020-07-31 22:56:48 118

原创 RecyclerView拖拽移动,长按小图标拖拽,侧滑删除

RecyclerView拖拽移动,长按小图标拖拽,侧滑删除Github源码Android RecyclerView出来也很多年了,是非常成熟的控件,Github上工具一堆,做的非常全,侧滑、拖拽、动画都封装好的,但是工作需求,这种小功能就不用别人的,自己学习一下,写一个简单的代码即可实现。RecyclerView的拖拽跟侧滑删除,其实就是使用 ItemTouchHelper 来实现,而我们只要写一下CallBack 继承 ItemTouchHelper.Callback(),重写里面的

2020-07-31 22:54:21 855

原创 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 2300 2

原创 Android 短信链接打开APP

短信链接跳转APP简书:Android 短信链接打开APP平时我们会收到广告短信,比如某东,某宝,里面附加着链接,当你点开链接(手机自带的浏览器),发现浏览器打开后,等一下下,就会打开对应的APP,直接到广告相应的页面。Android端的代码1.从简单的开始,第一个启动的Activity先来处理&lt;activity android:name=".activity.ActivityFirst"&...

2018-03-13 14:42:45 2108

原创 Android RecyclerView加载复杂布局

用一个RecyclerView实现多种复杂布局,复用机制要保存简书:Android RecyclerView加载复杂布局demo源码挂载在码云上面。https://git.oschina.net/GoodBaoZi/FuZaJieMianRecyclerViewFuYong/tree/master在开发过程中,特别是电商类的,有时要开发一个很复杂的页面,但是又要性能好,不怎么出现内存问题,所以今天...

2018-03-13 14:25:40 1325

原创 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 4981 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 872

原创 Android Studio 开发工具一些入门的小设置

Android  Studio 是目前开发Android的不二之选,2.0以后超级好用,虚拟机比以前快多了,不过我还是喜欢真机调试,有一些打电话、发短信其实还是要用到自带的虚拟机。我也是第一次分享内容,其实大部分都是网络上已经有了的解决方案,我收集了一些常用的。

2016-07-07 17:04:51 602

asm-bytecode-intellij-7.2.zip

用于Android studio 查看 字节码,ASM Bytecode Viewer,打开Android Studio,FIle -> Setting -> Plugins -> Install Plugins from Disk,选择文件就行,然后重启AS

2020-07-31

Android7.0相机截图及动态权限实例源码下载

Android7.0相机截图异常处理及动态权限

2017-03-09

空空如也

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

TA关注的人

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