自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 EventBus 父子事件处理

分析EventBus源码时,发现了postSingleEvent方法中有一个神秘的lookupAllEventTypes,通过断点调试发现,该方法的主要作用是查找所有与特定事件相关的父类事件,也就是说,如果你对父事件订阅了,有多个子事件的情况下,无论发送哪个子事件,都可以在订阅父事件的地方统一处理。

2024-04-11 15:38:06 194 2

原创 DataBinding实现点击事件

databinding的点击事件有好几种写法,在此实现一种个人觉得应该是最常用的写法。一般在开发中,点击一个按钮,可能会用到context,也可能会用到当前Activity的数据。databinding中会将点击事件的逻辑放到另一个类,如果点击事件需要用到Activity的数据,就需要将Activity的相关数据传递过去。通过监听器绑定的方式可以做到将Activity的数据传递从而实现不同的需求。具体步骤如下:1.gradle配置android { ... dat

2022-03-11 18:04:11 5965

原创 recyclerview中使用DataBinding

1.app模块gradle配置:android { ... dataBinding { enabled = true } ...}2.新建item布局,item布局文件item_list.xml代码如下:<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> &lt

2022-03-11 16:16:20 3306

原创 AndroidStudio 极狐下手写编译时注解示例

编译时注解在Android的运用一般就是在编译时通过注解处理器去生成文件,而生成文件可以借助javapoet等技术下面是Android中在AS 极狐版本下的具体步骤:1.新建java library,名字随意,该module只用于存放注解2.新建注解处理器module.也是一个java library,用于存放注解处理器类和处理生成文件的逻辑,该module一般依赖如下:implementation project(path: ':annolib') //第一步新增的用于存放注解的

2022-03-10 11:18:16 2373

原创 Android11下实现两个App的AIDL跨进程通信(含源码)

创建服务端工程 服务端创建aidl文件,在aidl文件内定义接口(注意如果需要使用对象,需要导包) 如果需要传递对象,需要创建对象的AIDL文件,比如Book类,创建Book.java(实现Parcelable接口)和Book.aidl并放在默认生成的aidl包下方便后面复制到客户端 gradle文件的android中配置,不然会找不到Book类sourceSets { main { java.srcDirs = ['src/main/java', 'src

2022-02-15 11:18:50 1634

原创 kotlin基础7:getter setter 幕后字段field

一、对比java的类声明和kotlin的类声明public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}熟悉java的一定很清楚,这是最常见的写法然而在kotlin里面,写法就非常简单了:cla

2021-12-31 14:32:44 1741

原创 kotlin基础5:重要的object关键字

一、通过object:实现对象表达式,从而使用匿名类的对象fun main(args: Array<String>) { var str = "123456" setOnMyTouchListener(object : OnMyTouchListener { override fun onTouch() { kotlin.io.println("onTouch...") kotlin.io.println(".

2021-12-15 17:54:47 1571

原创 kotlin基础6:单方法接口转换要注意的问题

public class OnClickListenerManger { public interface ClickListener{ void onClick(); } private HashSet<ClickListener> clickListeners = new HashSet<>(); public void addClickListener(ClickListener clickListener){ .

2021-12-15 07:54:26 1142

原创 单例模式,居然还可以问出连环炮?

饿汉单例:public class Singleton { private static Singleton singleton = new Singleton(); // 私有构造方法 private Singleton(){} public static Singleton getSingleton(){ return singleton; }}懒汉单例:public class Singleton {

2021-11-20 01:16:22 249

原创 uml 入门一: 使用PowerDesigner实现正向工程和逆向工程

逆向工程:将java代码转化为类图正向工程:将类图妆花为java代码逆向工程实现步骤:一、提供Java类:public class Parent { private String name; private String sleep; public String getName() { return name; } public void setName(String name) { this.name = nam

2021-11-11 16:37:20 1574

原创 kotlin基础4: 空安全

Java中常常会因为空值导致空指针异常,因为java允许在变量初始化时,没有赋值的话默认是空值而kotlin恰好相反,除非做特定声明,否则不能为空,并且在编译时期就会做出提醒并非所有变量都需要做特殊处理,只有那些可能为空的字段,为了避免空指针异常,才需要处理。又或者直接将变量设置为null,也需要做一些处理。var string:String = "hello" //正常声明fun main(args: Array<String>) { string = "Hel

2021-11-08 23:14:11 2037

原创 kotlin基础3: 匿名函数

匿名函数,就是没有名字的函数,通常作为参数传递给其他函数,或者作为一个函数的返回值。有些kotlin标准库的函数是接受一个函数传参的,比如Strings的count()Returns the number of characters matching the given [predicate].翻译过来大概就是返回符合给定的规则的字符的个数示例代码如下:fun main(args: Array<String>) { var number = "hello kotl.

2021-11-07 10:35:42 2147

原创 kotlin基础2: 反引号函数

反引用函数:用反引号`` 包围函数名(我的电脑这个符号在数字1的旁边)Android studio里面的反引号函数里的函数名可以用数字命名·,但是不可以使用#、*等特殊字符,如图:这个有什么用吗?在java和kotlin的互操作上,可以避免一些问题。比如,java中是没有is关键字的,kotlin将is作为关键字,在Java定义了一个is()方法,在kotlin里需要借助反引号来引用,如图:在Android studio中输入JavaMethod.is,会自动提示并转换...

2021-11-07 08:40:44 333

原创 kotlin基础1: String模板

开发工具:因为本人从事Android开发,所以直接使用Android studio,版本 4.0.1。fun main(args: Array<String>) { var name = "chen" println("$name eat something")}点击 Run "String TemplateKt" 按钮即可运行程序运行结果:可以看到,kotlin的String模板确实很好用,可以直接引用变量,省略了许多java中的加号拼接ko..

2021-11-06 07:26:04 9730 1

原创 LifeCycle监听Activity生命周期

public class LifeCycleActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyLifeCycleObserver myLifeCycleObserver = new MyLifeCycleObser.

2021-10-11 08:05:41 234

原创 java 泛型上限和下限

泛型上限:? extends泛型下限:? super首先需要明确的是泛型上限和下限是定义在方法的参数的,如果参数包含一个带有泛型的类,可以用上限或者下限给这个类做相应的限制,如果直接定义在类上会编译错误,比如不会这样定义:定义泛型类:class GenericTest<T> { private T first; private T last; public GenericTest(T first, T last) {

2021-09-06 15:30:41 1116

原创 androidX下优雅监听app是否处于后台

1.app模块的build.gradle添加依赖:implementation 'androidx.lifecycle:lifecycle-process:2.3.1'2.自定义app:public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); ProcessLifecycleOwner.get().getLifec

2021-09-03 14:32:49 161

原创 Android 11下tinker Demo打补丁

1.修改tinker官方demo为Android11:1.1.修改targetSdkVersion为301.2.修改compileSdkVersion为302.AndroidManifest.xml下增加权限<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />3.替换申请权限的方法找到demo中MainActivity下的askForRequiredPermissi

2021-08-20 10:55:35 412

原创 ReentrantLock实现wait和notify

ReentrantLock可以配合Condition来实现wait和notify的await()和signalAll()来实现线程的等待和唤醒。示例代码:public class TestClass { private final Lock lock = new ReentrantLock(); private final Condition condition = lock.newCondition(); private int count; public v.

2021-08-16 17:59:36 1083

原创 ReentrantLock简单使用

ReentrantLock和synchronized的作用类似,都是可以处理多线程下的同步问题,但是ReentrantLock比synchronized有一定的优势,比如可以指定获取锁的等待时间,如果超时则进行其他操作,不用一直等待下去。示例代码:public class TestClass { private final Lock lock = new ReentrantLock(); private int count; public void add() {

2021-08-16 17:16:24 162

原创 线程join方法浅析

简单来说,假如A线程希望等待B线程执行完成后再执行自身代码,A线程就可以调用B线程的join方法。示例代码如下:public class MyClass { private static Thread t2; private static Thread t1; public static void main(String[] args) { System.out.println("join test--->Main Thread start");

2021-08-16 15:17:36 142

原创 Android Studio 运行java程序

1.File ---->New------>New Module------>Java or Kotlin Library2.给要运行的java文件增加main方法3.找到app图标下的Edit Configurations4.创建一个新的application5.指定Main class和 Use classpath of module...

2021-08-16 14:58:41 1910

原创 浅析浅克隆和深克隆

浅克隆:可以得到一个和原来的类具有完全一样的属性值的对象。如果一个类里面有其他类,那么克隆出来的类里面的其他类是共用的,比如:A类包含B类的,A类可以通过getB()获取B1类,假设克隆出来的是A2,那么通过A.getB()得到的B1和A2.getB()得到的B2是同一个对象,修改B1的属性的同时B2也会被修改,同样修改B2的属性同时B1也会被修改深克隆:可以得到一个和原来的类具有完全一样的属性值的对象。但是修改B1的属性时B2不会被修改,因为B1和B2已经不是同一个对象。浅克隆示例代码:...

2021-08-10 17:48:32 121

原创 rxjava2.x系列一:基础入门

gradle配置:implementation'io.reactivex.rxjava2:rxjava:2.1.14'

2021-06-18 08:23:38 100

原创 内存四区模型

内存四区模型代码区:存放函数体的二进制代码,由操作系统进行管理全局区:存放全局变量和静态变量量及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收根据程序运行前后,可分为程序运行前的区域和运行后的区域程序运行前代码区存放cpu执行的机器指令代码区是共享的,共享的目的是对于频繁被执行的程序,只要在内存中有一份即可代码区是只读的,只读的原因是防止程序意外修改了它的指令全局区...

2021-05-20 07:09:57 105

原创 DataBinding的使用之双向绑定

DataBinding的双向绑定,可以实现控件和数据的双向绑定,比如在登陆场景下,如果你使用了一个UserModel来保存数据,当你修改UserModel中的字段时,Edittext会自动更新。并且,当你修改Edittext的输入内容时,UserModel也能得到同步修改xml:<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/andro

2021-04-29 07:31:10 2491

原创 DataBinding的使用之BindAdapter

BindingAdapter的作用可以理解为通过BindAdapterd注解,实现当数据发生变化时调用特定方法。BindingAdapter的使用流程如下:1、定义javaBean.,继承BaseObservable,定义可观察属性2、xml定义属性去绑定javaBean的某一个成员3、给想调用的方法增加BindingAdapter注解下面看一下示例代码:xml:<?xml version="1.0" encoding="utf-8"?><layout xm

2021-04-29 07:03:24 1133

原创 DataBinding的使用之数据动态改变刷新UI

android { 。。。 dataBinding { enabled = true } 。。。 }xml的最外层布局,按Alt+Enter,Convert to data binding layout通过以上方式开始可以使用databindingpublic class Bitcoin extends BaseObservable { //记得继承BaseObservable pu...

2021-04-29 06:23:19 1567 1

原创 策略模式

策略模式,体现的是面向接口的编程思想,比如,一个人的出行方式,可以骑车,坐地铁,坐飞机,编写代码时,将这些方式封装到一个Person类里面,是完全没问题的,但是,每增加一种方式,得修改Person类的代码。所以,更好的办法,是定义一个共同接口,然后各种出行方式去实现这个接口,Person类不再直接依赖具体的出行方式,而是依赖出行接口,从而实现由Person去执行不同的策略...

2021-04-29 06:18:32 126

原创 代理模式

代理模式平时我们生活中的代理,是指类似中介的角色,能够代理某一公司或机构帮助我们完成一类事情,同理,代码世界中的代理模式,也差不多是这样,先来看一下代理模式的类图:上面的Subject是一个公有接口,提供了一系列的能力,比如,房产公司就是一个公有接口,提供了房产交易的功能。 Proxy可以认为是房产中介,实现了Subject接口,也就是说Proxy代理了Subject,房产中介需要知道具体客户的信息,所以Proxy内部需...

2021-04-29 06:06:41 287

空空如也

空空如也

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

TA关注的人

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