自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 自定义Gradle Plugin

一、编写插件下面我们用一个示例来介绍如何自定义Gradle插件。该插件的功能非常简单,仅仅是定义了一个Task然后打印一条日志信息。详细步骤:第1步:新建一个项目(Project)在新建的空项目中,会自动包含一个主module,即:app。第2步:创建plugin module创建Android Library module,module名称叫plugin,我们将会用这个Library写Gradle Plugin;第3步:创建plugin需要的目录结构首先删除plugin/src

2021-04-15 14:46:12 454

原创 android 装饰模式应用

一、定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实对象。二、特点(1) 装饰对象和真实对象有相同的接口,这样客户端对象能以和真实对象相同的方式和装饰对象交互。 (这一点和代理相似,只是侧重点不同,代理侧重隐藏被代理类,装饰侧重扩展被装饰的对象)(2) 装饰对象包含一个真实对象的引用(reference)(3...

2020-04-22 12:33:14 409

原创 Lifecycle应用系列之progress加载动画

背景:由于项目经手的人太多了,项目业务也越来越复杂,代码量也越来越大,一些控件的UI样式也不统一,最近UI想让我们统一封装基础控件,方便以后修改样式,我这边分到了部分封装功能,其中就包括加载动画,封装过程中有所思,遂分享之。效果图如下:动画采用的是帧动画,布局文件如下:布局 layout_loading_view.xml<?xml version="1.0" encoding=...

2020-04-20 16:39:25 208

原创 LiveData使用

一、什么是LiveData。LiveData 是可观察的数据持有者类。与常规的可观察对象不同,LiveData具有生命周期感知功能,这意味着它尊重其他应用程序组件(例如活动,片段或服务)的生命周期。这种意识确保LiveData仅更新处于活动生命周期状态的应用程序组件观察者。如果LiveData的Observer生命周期处于STARTEDor RESUMED 状态,则它认为由类表示的观察者 处于...

2020-04-18 15:57:00 780

原创 Jetpack之Lifecycle(一)Lifecycle简介及使用方法

1、为什么需要Lifecycle在 Android 框架中定义的大多数应用组件都存在生命周期。生命周期由操作系统或进程中运行的框架代码管理。它们是 Android 运作方式的核心,应用必须遵循它们。如果不这样做,可能会引发内存泄露甚至应用崩溃。那么我们在开发中如果想自己监听activity的声明周期,可能会需要这样写:class MyLocationListener { pub...

2020-04-16 16:32:18 376

原创 implementation和api的区别

关于implementation和api的区别,一共分为两个方面:一、编译范围关于这一部分,[参考官网],说的很清楚:implementation:Gradle 会将依赖项添加到编译类路径,并将依赖项打包到构建输出。不过,当您的模块配置 implementation 依赖项时,会让 Gradle 了解您不希望该模块在编译时将该依赖项泄露给其他模块。也就是说,其他模块只有在运行时才能...

2020-04-02 15:21:43 15038 3

原创 限制EditText输入长度#监听EditText输入

方法一:/** * 设置edittext最大的输入限制 * @param editText * @param length */ private void setMaxLength(EditText editText , int length){ editText.addTextChangedListener(new TextWat...

2020-02-11 15:57:17 243

原创 PopupWindow覆盖状态栏#解决PopupWindow无法覆盖状态栏

PopupWindow遮挡状态栏popupWindow.setClippingEnabled(false);

2020-01-15 17:24:41 1295

原创 android 自定义view对勾、对号#属性动画绘制对勾、对号#绘制对勾、对号

package ddd;import android.animation.Animator;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.g...

2020-01-14 10:31:06 1920

原创 Cause: buildOutput.apkData must not be null

解决方式一Build -> Clean Project Build -> Make Project解决方式二Build -> Rebuild Project解决方式三手动删除所有module自动生成的build文件夹

2020-01-14 10:01:49 114

原创 消息悬浮弹窗#顶部弹窗

最近写了一个消息弹窗的需求项目地址https://github.com/geyuecang/Test.git初步完成效果如下

2020-01-13 18:01:25 919

原创 输入输出流

很多同学在用遇到输入输出流时都分不清什么时候用输入流,什么时候用输出流,这里分享一下我的方法,只需要记住四个字 “读入写出”,当你需要 “读” 数据的时候,就用 “输入流”,当你要 “写” 数据的时候,就用 ”输出流”。接下来我们看一下输入流的处理:字节流-》字符流-》字符缓冲流package com.c.temp;import java.io.BufferedReader;impor...

2019-12-27 21:11:24 114

原创 Java实现单例

1. 什么是单例模式单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。单例模式的要求有三点:某个类只能有一个实例它必须自行创建这个实例他必须自行向整个系统提供整个实例2. 单例模式和静态类的区别首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构...

2019-12-19 11:34:34 95

原创 Android设置TextView中部分字体颜色和点击事件

在开发中有时会遇到给textview部分文字设置字体颜色和点击事件的情况,当然,用多个textview也能百分百满足这个需求,但是就代码简洁易用方面还是比较差,我们今天谈一下更为便捷的方式——Google官方提供的SpannableStringBuilder,SpannableStringBuilder的API:​/** * This is the class for text whose ...

2019-12-17 16:03:04 2050 1

原创 WebP实践

WebP是 Google 开发的一种图片文件格式,提供有损压缩(如 JPEG)并支持透明性(如 PNG),不过与 JPEG 或 PNG 相比,这种格式可以提供更好的压缩效果。Android 4.0(API 级别 14)及更高版本支持有损 WebP 图片,Android 4.3(API 级别 18)及更高版本支持无损且透明的 WebP 图片。此页面介绍了如何将图片转换为 WebP 格式,以及如何将 WebP 图片转换为 PNG 格式。

2019-12-10 15:55:49 377

原创 自定义线程池

本文是简单自定义线程池,只是帮助理解线程池的工作流程,其中很多地方有待完善,不能直接拿到项目里用。package com.c.study.threadpool;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;/** * @Author geyuecan...

2019-10-15 18:03:31 88

原创 ThreadLocal用法

ThreadLocal使用场景:多个线程共用一个变量值(如一个静态变量),当每个线程对该变量做处理时,保证其他线程中该变量值不变,即多个线程共用,但是只是各自持有这个变量的拷贝,这个时候我们要用到ThreadLocal.使用代码示例如下:package com.c.study.thread;import androidx.annotation.Nullable;/** * ...

2019-10-14 11:14:25 221

原创 线程顺序执行

在面试时我们常被问及如何让java线程顺序执行,这我们就要了解一下 join() 方法了,我们首先来看下join()源码:/** * Waits for this thread to die. * * <p> An invocation of this method behaves in exactly the same * way as ...

2019-10-12 14:47:54 137

原创 取消线程二

##中断线程(二)java中中断线程不能用stop、suspend,这两种方法会强制中断线程,可能会造成不同步,破坏数据,并且这个时候线程所持有的资源未得到释放,会造成阻塞。那么我们该怎样终止线程呢,java给我们提供了intterrupt方法如下:public class InterruptThread { public static void main(String[] args...

2019-10-10 18:00:21 251

原创 取消线程(一)

可以取消并且有返回值的线程一、首先看代码实现package com.c.study.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;/** * @Author geyue...

2019-10-10 11:59:55 111

原创 代理模式详解

代理模式和静态代理代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:张三想买某种用品,虽然他可以自己去找,但是这确实太浪费时间和精力了,或者不好意思去买。于是张三就通过中介代理来买,代理来帮张三,张三只是负责选择自己喜欢的的size,然后付钱就可以了。目的:(1)通过引入代理对象的方式来间接访问目标对象,防...

2019-09-28 17:54:42 197

原创 Android Studio 问题记录-全部java文件全部报错,却可以运行

Android studio不知道抽了什么风,早晨一打开android studio 文件都报错了,但是奇怪的是还能正常运行,经过查证,以下方法完美解决1.点击File->Invalidate Caches / Restart…2.刷新缓存并重启...

2019-05-13 11:55:48 861 1

原创 软键盘弹出后布局上移

AndroidManifest属性设置:键盘直接覆盖,不让屏幕上移:<activity android:name=".activity.MainActivity"Android:windowSoftInputMode="adjustPan|stateHidden"/>这样会让屏幕整体上移:Android:windowSoftInputMode="stateVisibl...

2019-05-08 18:40:53 871

原创 自定义流式布局FlexableLayot

/** * author : geyuecang * date : 2019/4/23 15:15 * desc : desc */public class FlexableLayout extends ViewGroup { public FlexableLayout(Context context) { this(context, null); ...

2019-04-23 17:07:35 328

转载 android事件传递的几篇好文章

一直对android事件的传递、拦截处理萌萌咚咚,特意了解了下,看到网上的几篇文章写的很透彻,在这里跟大家分享下:Android事件分发机制完全解析,带你从源码的角度彻底理解(上)Android事件分发机制完全解析,带你从源码的角度彻底理解(下)requestDisallowInterceptTouchEvent调用时机分析细说Android事件传递机制(dispatchTouchEven...

2019-04-11 17:50:21 75

原创 LiveDataBus实现原理#用法详解#LiveData扩展

LiveDataBus实现原理#LiveData源码分析一、liveDataBus简单实现public class LiveDataBus { private final Map<String, MutableLiveData<Object>> mBus; private LiveDataBus() { mBus = new Array...

2019-04-04 16:47:14 3936 3

原创 最简单的自定义indicator实现粘性tab

自定义indicator实现粘性tabpublic class MyIndicator extends View { private Context context; private Paint mPaint; private RectF rect; private List<PositionData> positionList; priva...

2019-04-02 17:43:47 588

原创 git fetch 更新远程代码到本地仓库

git fetch 更新远程代码到本地仓库

2019-03-29 17:11:30 764

原创 vim命令#linux下变成常用命令

esc退出编辑状态,进入命令行状态i进入编辑状态a在当前字符后面插入A在行末插入I在行首插入w保存q退出dd删除整行o换行到下一行O换行,定位到当前行的上一行cp a.c b.c 拷贝a.c到b.ccc 编译touch创建文件mkdir 创建目录sudo apt-get update/installcd ~进入home目录./当前目录进入文件下,vi 编辑...

2019-03-28 16:06:23 91

原创 Java反射获取类的全部属性和全部方法#getMethods、getDeclaredMethods区别#getFields、getDeclaredFields区别

Java反射获取类的全部属性和全部方法如下://获取该类Class对象返回Class<?>,也可用 对象.getClass获得// Class<?> clazz = Class.forName("com.c.butter.Unbinder");// Class<? extends List> clazz = l...

2019-03-28 11:41:32 1018

原创 注解全面解析#注解使用案例#手写Butterknife依赖注入架构

到此为止一个完整的运行时注解小案例就完结了,大家是不是感觉很简单,大家会有所以问,难道辣么NB的注解框架就是这么实现的?我擦?恭喜你,你问到点子上了,当然没这么简单。由于运行时注解的解析需要在运行时通过反射来解析,而在程序中运用大量的反射会影响程序运行效率,试想一下,我们的代码量很大的时候,在运行时还要运用反射去遍历所有view,显然,这不是我们想要的框架。

2019-03-25 15:44:24 326

原创 Android 性能优化 TraceView用法与分析

TraceView 简介:TraceView 是Android平台提供的数据分析工具,通过它我们可以对内存泄漏等性能问题进行定位,需要明确的是,它只是分析工具,而不是数据采集工具,数据的采集是通过Debug类或者DDMS工具来采集的。数据采集:生成 trace 文件有两种方法: 1.使用代码 2.使用 DDMS1.使用代码生成trace文件:Debu...

2018-06-28 16:10:35 273

原创 Android 解决anr问题最快最简单的姿势

ANR定义与分类ANR(Application Not Responding):应用程序无响应,是Android中AMS与WMS监测应用响应超时的表现;我们应用开发中常见的ANR主要有如下几类:KeyDispatchTimeout1:KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应BroadcastTimeout2:...

2018-06-28 14:33:46 2479

转载 深入理解 Java 垃圾回收机制

深入理解 Java 垃圾回收机制一:垃圾回收机制的意义java 语言中一个显著的特点就是引入了java回收机制,是c++程序员最头疼的内存管理的问题迎刃而解,它使得java程序员在编写程序的时候不在考虑内存管理。由于有个垃圾回收机制,java中的额对象不在有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存;内存泄露:指该内存空间使用完毕后未回收,

2017-04-24 23:30:46 331

转载 Android与h5交互

原文 1、webView加载页面我们都知道在Android中是通过webView来加载html页面的,根据HTML文件所在的位置不同写法也不同://例如:加载assets文件夹下的test.html页面 mWebView.loadUrl(“file:///android_asset/test.html”) //例如:加载网页 mWebView.loadUrl(“http://www.baid

2017-04-24 21:39:30 214

原创 RxJava 的使用详解(一)

RxJava 的使用详解(一) 1.作用RxJava的目的就是异步。 RxJava的特点就是可以非常简便的实现异步调用,可以在逻辑复杂的代码逻辑中以比较轻易的方式实现异步调用。随着逻辑的复杂,需求的更改,代码可依然能保持极强的阅读性,在深入的使用过程中一定对这点深有体会。2.工程引用要应用RxJava,需要在项目中引入依赖:compile ‘io.reactivex:rxandroid:1.2.

2017-04-22 12:50:54 541

原创 ToolBar简介以及使用详解

ToolBar简介以及使用详解通过本篇博客大家可以了解到: 1.ToolBar是什么 2.ToolBar常用属性 3.ToolBar如何使用 1.ToolBar简介 Toolbar supports a more focused feature set than ActionBar. From start to end, a toolbarmay conta

2017-04-21 11:16:16 1737

空空如也

空空如也

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

TA关注的人

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