自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

搬砖爱好者

行到水穷处,坐看云起时。

  • 博客(25)
  • 收藏
  • 关注

原创 Android 事件分发

Android 源码事件分发Activity#dispatchTouchEvent /** * Called to process touch screen events. You can override this to * intercept all touch screen events before they are dispatched to the * window. Be sure to call this implementation for

2021-01-15 14:49:11 3

原创 Android Message处理流程

Message处理流程Loop#loop开启无限循环不断的从消息队列里面取出消息... for (;;) { Message msg = queue.next(); // might block if (msg == null) { // No message indicates that the message queue is quitting. return;

2021-01-15 11:03:00 4

原创 Android 动画

Android 动画分类帧动画 view动画也叫补间动画属性动画帧动画(AnimationDrawable)使用:在xml中定义一组图片,通过getBackgroud()相关方法获取并转化为AnimationDrawable对象,执行帧动画。<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" a

2021-01-13 11:19:19 13

原创 合并两个有序链表

合并两个有序链表输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]题解思路 :定义一个新的链表和一个指针,遍历两个链表,对比大小,追加到新链表的后一个节点,链表指针后移。时间复杂度O(n)空间复杂度O(1)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode()

2021-01-12 21:45:06 9

原创 leetcode算法之反转链表

思路采用栈的数据结构和特点,先进后出。复杂度时间复杂度O(n)空间复杂度O(n)/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode reverseList(ListNo

2021-01-11 21:28:42 108 5

原创 LinkedHashMap 简介

LinkedHashMap 简介定义: LinkedHashMap 是根据插入或访问顺序实现有序输出的HashMap数据结构 : HashMap + 双向链表使用示例://普通HashMapMap<Integer, String> hashMap = new HashMap<Integer, String>();hashMap.put(3, "order3");hashMap.put(1, "order1");hashMap.put(2, "order2");h

2021-01-11 21:05:59 11

原创 图片加载框架Glide

为什么要用Glide链式调用,兼容系统控件imageView,使用非常简单。不必像Fresco那样得用SimpleDrawableView Glide.with(this) .load(data.teacher_image) .placeholder(R.drawable.recommend_teacher_icon) .error(R.drawable.recommend_teacher_icon)

2021-01-11 17:58:11 3668 2

原创 java线程池相关问题

allowCoreThreadTimeOut方法设置为true的含义如果设置成true,你设置的keep-alive(超时时间)不仅会作用于非核心线程,同样核心线程超过这个时间,也会被回收掉。

2021-01-08 12:40:56 14

原创 OkHttp源码相关面试点

首先介绍下okhttp源码涉及到的几个类okhttpClient okhttp的大管家,负责初始化一些必要参数 拦截器 超时时间等。Builder模式来创建的。Request 负责构建一个请求对象,通过你传入的url,也是通过Builder模式来创建Response 负责构建一个相应对象。Dispater 内部是线程池和两个队列,一个是存放等待发起请求的call对象,另一个是存放已经发起请求的call对象 线程池负责网络请求在子线程中执行。此类创建的线程池是核心线程数为0,线程闲置时间为60s,

2021-01-07 21:46:05 20

原创 实现添加view 同时伴随移除view动画的效果的自定义ViewGroup

整体代码/** * @author * @desc : 支持添加view 伴随动画的效果 * */class AnimViewGroup(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) { /** * 缓存一个view 为了复用 */ var cacheScrapView: View? = null private set private v

2020-11-20 18:18:55 35

原创 android 屏幕常亮控制

控制屏幕常亮不熄灭方式1代码里调用val pm = context!!.getSystemService(Context.POWER_SERVICE) as PowerManagerval wakeLock = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP, "" )wakeLock.acquire()

2020-09-12 15:39:01 9

原创 Android 消息机制

主线程Looper创建的位置ActivityThread的main方法中,也就是消息机制开始建立的地方 Looper.prepareMainLooper(); // Find the value for {@link #PROC_START_SEQ_IDENT} if provided on the command line. // It will be in the format "seq=114" long startSeq = 0;

2020-09-11 16:05:16 14

原创 Android 属性动画

属性动画ViewPropertyAnimator imageView.animate() .translationX(200.dp) .translationY(100.dp) .scaleX(2f) .scaleY(2f) .alpha(0.5f) .setStartDelay(1000)缺点:有局限性,只能改变其中的几个属性,横向纵向 渐变旋转比如

2020-09-07 15:07:37 48

原创 自定义View之SportView

private val SPORT_RADIUS = 150.dpclass SportView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : View(context, attrs, defStyleAttr) { private val mPaint = Paint(Paint.ANTI_ALIAS_FLAG) pri

2020-09-03 14:56:02 32

原创 利用反射简单实现类似Butterknife

lib-refrection/** * @author : zyl * @desc : */public class Binding { public static void bind(Activity activity) { for (Field field : activity.getClass().getDeclaredFields()) { BindView bindView = field.getAnnotation(BindView.c

2020-07-30 11:31:16 43

原创 Android图片加载内存优化

利用BitmapFactory.Options实现图片内存优化首先准备了一张1280x800的blue_bg.png图片,我们知道这张图片加载到内存默认占用的大小是1280x800x4 = 4096000byte Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.blue_bg);// 默认情况下 BitmapFactory 使用 Bitmap.Config.ARGB_8888 的存储方式

2020-06-01 17:19:45 140

原创 Messenger实现进程间通信

Messenger实现进程间通信为什么Messenger能进行进程间通信使用Messenger如何实现进程间通信Messenger工作原理图总结Thanks为什么Messenger能进行进程间通信Messenger翻译为信使,他可以在不同的进程中传递Message对象首先我们看下这个类的构造方法,发现,他的底层实现其实就是AIDL。 /** * Create a new Messenger pointing to the given Handler. Any Message

2020-05-19 12:02:52 112

原创 聊聊自定义View那些事

聊聊自定义View那些事为什么要自定义View如何自定义View为什么要重写onMeasure方法如何重写onMeasure方法总结为什么要自定义View为了实现某些炫酷的动画和效果。为了优化应用性能。系统控件满足不了需要如何自定义View继承系统View,实现相应的构造方法public class CircleView extends View { private Paint mPaint; private float cx; private float

2020-05-13 22:28:31 70

原创 Android Handler机制

Android Handler机制handler是如何创建的?handler机制是如何运转的?Android 系统中的Handler是如何应用的?总结handler是如何创建的?我们先在子线程中创建一个handler,代码如下:new Thread(new Runnable() { @Override public void run() {...

2020-05-04 21:39:17 83

原创 Android 点击事件分发

Android 点击事件分发Activity中对事件的处理ViewGroup是如何进行事件处理的View的dispatchTouchEvent相当重要,让我们继续look总结Activity中对事件的处理事件分发方法,返回true表示事件被消费掉了public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAct...

2020-05-04 11:45:50 124

原创 okHttp源码分析

我们从调用的方式着手,看看代码是怎么走的

2020-04-26 09:19:41 166

原创 使用NestedScrollView嵌套RecycleView

使用NestedScrollView嵌套RecycleView使用原因使用过程中的问题记录1.自动滚动问题2.RecycleView复用机制失效问题使用原因项目需要。。。不推荐这么用,原因:链接使用过程中的问题记录xml布局文件如下... <android.support.v4.widget.NestedScrollView android:l...

2020-04-17 17:04:10 110

原创 借助profiler和mat进行内存泄露的分析

借助profiler和mat进行内存泄露的分析工具版本模拟内存泄露内存分析使用mat工具进行进一步确认问题与总结工具版本android studio 3.6.1模拟内存泄露建立工程,把下面的自定义view放入项目中,反复进入退出界面package com.enjoy.memory.widget;import android.animation.ValueAnimator;i...

2020-04-12 22:15:40 197

原创 借助profiler工具进行内存分析

借助profiler工具和Mat进行内存分析工具说明模拟内存问题场景利用Profiler工具进行内存分析问题解决与总结工具说明android studio 版本3.6.1模拟内存问题场景建立一个新的工程,把下面有问题的自定义VIew,引入到工程里面,最好是写两个activity,把下面自定义view引入到第二个SecondActivity里面,方便测试。public class ...

2020-04-11 11:13:43 65

原创 学习自定义Gradle插件

自定义 Gradle 插件首先新建一个项目新建一个module模块,删除无关文件,只需保留main和build.gradle文件即可gradle文件中删除之前默认所有配置,引入如下配置//管理仓库的插件apply plugin: 'maven'//groovy插件apply plugin:'groovy'dependencies { compile gradleApi...

2020-04-06 10:47:46 146

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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