- 博客(26)
- 资源 (4)
- 收藏
- 关注
原创 LiveData从使用到源码
介绍LiveData 是一个可以在给定生命周期内观察到的数据持有者类。这意味着观察者可以与 LifecycleOwner 成对添加,并且只有当配对的 LifecycleOwner 处于活动状态时,才会通知该观察者包装数据的修改。如果 LifecycleOwner 的状态为 Lifecycle.State.STARTED 或 Lifecycle.State.RESUMED,则认为 LifecycleOwner 处于活动状态。通过 observeForever(Observer) 添加的观察者被视为始终处于
2022-03-02 21:56:58 202
原创 ViewModel使用到源码解读
介绍ViewModel 是一个类,负责为 Activity 或 Fragment 准备和管理数据。它还处理 Activity Fragment 与应用程序其余部分的通信(例如调用业务逻辑类)。 ViewModel 始终与范围(片段或活动)关联创建,并且只要范围处于活动状态就会保留。例如。如果它是一个活动,直到它完成。换句话说,这意味着如果 ViewModel 的所有者因配置更改(例如旋转)而被销毁,则不会销毁 ViewModel。新的所有者实例只是重新连接到现有模型。 ViewModel 的目的是获取和
2022-02-26 20:05:42 2340 2
原创 RecyclerView从使用到源码
基本使用 RecyclerView mRecyclerView = findViewById(R.id.mRecyclerView); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); List<String> list = new ArrayList<>(); for (int i = 0; i < 20; i++) {
2022-02-22 23:32:22 883
原创 WebSocket的简单使用
介绍WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输介绍完直接上代码服务端public class .
2022-02-11 22:17:30 2248
原创 ArrayList源码解析
前言ArrayList是我们非常常用的数据存储内,在这篇文章里我们就了解一下ArrayList的内部数据结构,从最开始构造函数说起构造 ArrayList<Object> arrayList1 = new ArrayList<>(); ArrayList<Object> arrayList2 = new ArrayList<>(10); ArrayList<Object> arrayL
2022-02-10 22:10:09 851
原创 String和StringBuilder,StringBuffer的区别
共同点都是final类不可以被继承,都是现实了Serializable, Comparable, CharSequence接口作用上的共同点则是都是用来存储字符串区别String在申明内容是字面值常量每次对字符串进行拼接其实是对新建了一个对象,如果是有大量的字符串拼接则会创建大量的对象这样就效率低下了,适用于内容较短的且不需要多次拼接的场景StringBuilder @Override @IntrinsicCandidate public S.
2021-11-12 22:03:57 216
原创 java中 == equals hashCode的区别
==在基本数据类型中用啦比较两个数值是否相等,引用数据类型则是用于比较两个对象引用是否相同换言之就是比较是不是同一个对象equals public boolean equals(Object obj) { return (this == obj); }上面这段代码是Object类中equals的实现可以看出在不重写equals方法的情况下是和 ==相同的在我们实际开发中如果是需要比较两个对象内的值是不是相等就可以去重写equals方法在...
2021-11-12 21:18:29 390
原创 深度理解Java虚拟机
运行时数据区程序计数器一块很小的内存区域线程私有可以看作记录代码执行行数的记录器虚拟机通过它选取下一行要执行的代码控制循环判断跳转异常等为线程切换时恢复到正确的代码执行位置虚拟机栈和程序计数器一样是线程私有的内存区域,他的生命周期和线程一致在线程执行一个函数就会创建一个栈帧,在栈帧中存储着局部变量表(boolean,byte,short,char,int,float,double,对象引用并非真正的对象),操作数栈,动态链接以及方法出口等,每一个方法调用到执行完毕就对应着一.
2021-07-31 00:00:59 119
原创 MMKV使用及原理
基本使用implementation 'com.tencent:mmkv-static:1.2.9'MMKV.initialize(this);MMKV kv = MMKV.defaultMMKV();从上面存储函数的入参上我们发现了它其实也是用了key,value的方式对数据进行存储接下来我们看下一下存储方式这种存储方式其实就是上第一种存储方式的一种包装而已,但是做到与SharedPreferences调用方式上的基本兼容.与SharedPreferences比较SharedPref
2021-06-17 23:22:19 928
原创 Java线程死锁的造成
线程线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程下面我们看一段造成死锁的代码public class Main { priva
2020-08-20 22:10:32 142
原创 Java中Object的wait(),notify(),notifyAll()理解
Objectjava中所有的类都会隐式的继承Object,但是Object的wait,notify,notifyAll我们又真的会用吗synchronizedsynchronized是用来保证我们的一段代码在执行的过程中不会被中断而引起并发问题,synchronized可以修饰一个函数,某一段代码而wait()函数就应该在synchronized代码块中执行synchronized使用场景当我们有多个线程同时开启,但是在某一个特定时刻只有一个线程在真正的执行,当我们需要一段代码执行完而不被中断
2020-08-19 23:47:49 186
原创 Java生产者消费者,控制一个数在0-4之间变化
代码public class Main { private static int i = 0; public static void main(String[] args) { Main main = new Main(); producer(main); consumer(main); } private static void consumer(Main main) { new Thread(
2020-08-19 19:45:06 130
原创 EventBus源码阅读理解
EventBusAndroid中主流的事件传递库,简化我们代码中回调以及线程操作EventBus引入implementation 'org.greenrobot:eventbus:3.2.0'注册EventBus.getDefault().register(this);接下来我们看下这里是怎么注册的 public static EventBus getDefault() { EventBus instance = defaultInstance; if
2020-08-19 19:19:12 134
原创 Android系统与开发相关的新特性
Android 6.x运行时权限Android7.xFileProvider应用件文件共享添加JIT动态编译,部署应用加快引入v2签名策略Android8.x通知多渠道,通知细分、通知红点、通知延后后台服务、广播执行限制蓝牙功能提升Android9.x所有应用都使用HTTPS多摄像头支持开发人员可以使用多摄像头API同时访问来自2个物理摄像头的流android 10引入完全手势导航,消除导航区域安全和隐私提升...
2020-08-18 21:20:10 146
原创 ARouter浅析
ARouterARouter是:阿里巴巴自研路由框架,主要解决组件间、模块间的 界面跳转 问题。基本使用首先按步骤引入这个库ARouter ARouter.getInstance() .build("/module_second/second") .withString("data", "通过ARouter打开的Activity") .navigation();@Route(path =
2020-08-18 00:54:25 218
原创 网络框架Okhttp源码解析
前言前面我们看到Okhttp通过线程池执行我们的网络请求现在我们看一下这个请求在这个线程池中是怎么执行的先上代码 @Override public void enqueue(Callback responseCallback) { synchronized (this) { if (executed) throw new IllegalStateException("Already Executed"); executed = true; } capt
2020-08-16 18:15:41 111
原创 OkHttp基本使用和内部基本原理
Okhttp是什么Okhttp是Java上很流行的一款网络情况框架,由square出品基本使用 String url = "http://co-api.51wnl.com//Calendar/GetStar?starName=aries&client=ceshi&token=7AFA7AC511153E696C09D04F94816CB1"; Request request = new Builder().url(url).build(); Ok
2020-08-14 23:22:39 630
原创 Android中Looper.loop()为什么不会ANR呢?
ANR是什么Application Not Responding即应用无响应ANR怎么造成的造成ANR通常是事件没有及时处理完成引起的Android中点击事件在5秒内没有得到处理就会造成ANR这个5秒的时间呢则是在ActivityManagerService.java中定义的static final int KEY_DISPATCHING_TIMEOUT = 5*1000;Android中广播也会造成ANR,广播的超时又分为两种分为FG(10s)(和BG(60s)这个时间呢同样是在A
2020-08-14 21:59:25 456
原创 Android下Handler分析
介绍Handler是Android应用内通讯组件,可实现线程间的通讯如子线程获取网络数据须在主线程更新UI使用,Handler通讯由现在虽然不流行这样的方式但是我们还是需要了解其内部的原理组件介绍Handler(消息发送接收)Message(消息体)MessageQueue(消息队列)Looper(轮询器)Handler private Handler handler = new Handler(Looper.getMainLooper()) { @Overrid
2020-08-14 20:39:31 181
原创 Android 获得可用摄像头id
int cameraId = -1;int numberOfCameras = Camera.getNumberOfCameras();for (int i = 0; i <= numberOfCameras; i++) { Camera.CameraInfo info = new Camera.CameraInfo(); Camera.getCameraInfo(i,...
2019-03-27 19:23:44 68371 4
使用OpenGL ES对YUV图片进行显示
2018-06-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人