- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 Java并发编程(四)ThreadLocal的使用及原理
导图一、基本概念ThreadLocal为线程变量,也常说线程局部变量;提供了线程内存储变量的能力,这些变量在每一个线程之间存取都是相互独立的。官方注释/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@c
2020-09-23 17:52:27 226
原创 Java并发编程(三)多种方式实现生产者消费者模型
1、wait/notify的方式public class ConsumerProducter { private static LinkedList<Object> mList = new LinkedList<>(); private static final int MAX = 10; public static void main(String[] args) { new Thread(new ProducterRunnable())
2020-09-08 11:15:14 171
原创 Condition实现等待唤醒的原理
1、引言任何一个Java对象,都拥有一组监视器方法(定义在java.lang.Object上),主要包括了wait、notify、notifyAll方法,他们与synchronized关键字配合可以实现等待/通知模型。那么如果我们不适用内置锁而是通过Lock想要实现等待/通知模型的话就需要使用到Condition接口。这两种实现等待通知模型的方式在性能上还是有一些不同的,这里引用《Java并发编程的艺术》里的对比图片:2、使用Condition配合Lock的实现等待唤醒的方式与内置锁等待唤醒的使用方
2020-08-30 17:43:49 454
原创 ReentrantLock源码分析
一、引言ReentrantLock作为concurrent包一下的一员,有着比Synchronized更加直观灵活的使用方式;private static void lockTest() { try { lock.lock(); //dosometing } catch (Exception e) { } finally { //unlock一定要放在finally语句中
2020-08-30 17:42:57 227
原创 呕心沥血:RxJava2.x变换操作符
RxJava的基本流程分析可以参考之前的文章https://www.jianshu.com/p/2adaea7237c4RxJava创建操作符讲解https://www.jianshu.com/p/376fb237d93c1、序言RxJava除了拥有逻辑简洁的事件流链式调用,使用简单外其丰富的操作符基本可以满足日常开发中的各种实现逻辑Rx的基本操作符分类下面会逐一讲解RxJava的变换操作符2、变换操作符RxJava变换操作符分类2.1、map作用:将输入事件流中的内容逐一的进行修
2020-08-30 17:42:12 196
原创 呕心沥血:RxJava2.x基础流程分析
RxJava一、RxJava的优势以及基本使用1、优势1、代码逻辑清晰 优雅2、避免回调订阅3、线程调度2、使用示例 Observable observable = Observable.create(new ObservableOnSubscribe() { @Override public void subscribe(ObservableEmitter e) throws Exception { e.onNext("RxText")
2020-08-30 17:40:30 172
原创 呕心沥血:RxJava2.x创建操作符
1、序言RxJava除了拥有逻辑简洁的事件流链式调用,使用简单外其丰富的操作符基本可以满足日常开发中的各种实现逻辑Rx的基本操作符分类下面会逐一讲解每一类操作符的使用2、创建操作符2.1、基本创建操作符create作为RxJava最基本的创建操作,用来完整的创建一个被观察者Observable对象通过create创建一个被观察Observable对象 Observable observable = Observable.create(new ObservableOnSubscribe()
2020-08-30 17:39:47 244 1
原创 AsyncTask的使用以及实现原理
一、AsyncTask的简介以及使用1、AsyncTask的简介一个Android轻量级异步类;实际上在我们日常开发中可能会遇到大量子线程处理数据然后回调到主线程进行展示处理等需求,因此谷歌官方将线程池+Handler封装成了AsyncTask,方便开发者使用。2、使用public class TestActivity extends BaseActivity { private TextView tv_progress; @Override public void in
2020-08-30 17:38:16 660
原创 Android-JNI的简单使用
一、什么是JNI1、jni的含义JNI即为java native interface Java本地接口;JNI是用来调用本地方法的技术,用来使Java和C/C++进行通信。简单来说,Java运行一个程序需要和不同的系统进行交互,在windows里就要和windows底层平台交互,mac里就要和mac的底层平台交互, JVM就是通过大量的JNI技术能够使Java运行在不同的系统平台当中,与不同的系统平台底层进行交互。2、Java与JNI类型对照表基本类型对照引用类型对照3、什么是动态库 静态
2020-08-30 17:37:12 5281
原创 Java基础巩固——Java泛型
1、Java中的泛型思维导图1.1、为什么要使用泛型例如下面这个例子,如果list不加泛型,先向其添加两个String的值,再向其中添加一个Integer的值,这是完全可以的,因为这是list默认的类型是Object的;但是平时开发当中,可能忘了还传入了一个Integer的类型,就会导致如下的错误:public static void main(String[] args) { List list = new ArrayList(); list.add("111")
2020-08-30 17:27:08 366 2
原创 基于Android6.0源码修改屏蔽系统下方的虚拟按键以及上方的状态栏
1、屏蔽系统底部的虚拟按键 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 在PhoneWIndowManager.java文件中有如下代码:String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");i
2017-06-28 14:41:20 7193 5
原创 利用Robotium进行安卓自动化测试
一、什么是Robotium Robotium是一款类似Selenium但面向Android端的开源自动化测试框架,既支持测试Native应用,也支持Hybrid应用(混合开发),兼具Native APP良好的用户交互体验的优势以及Web APP跨平台、易变更的又是;既支持黑盒形式的自动化测试,也支持白盒形式的自动化测试。通过Robotium用户可以编写出更强大健壮的UI自动化测试用例,并可
2017-05-15 15:02:58 486
原创 RecyclerView的滑动删除以及下拉加载
1、自定义MyRecyclerViewpublic class MyRecyclerView extends RecyclerView { private Context mContext; //检测手机在滑动过程的速度 private Scroller mScroller; private VelocityTracker velocityTracke
2017-05-12 09:15:55 340
转载 Camera1.0和Camear2.0的区别
内容Camera1.0Camera2.0是否相同权限android.permission.CAMERAandroid.permission.CAMERA是布局SurfaceViewTextureView否实现接口SurfaceHolder.Callback 1.surfaceCreated 2.surfaceC
2017-03-31 08:52:54 5003
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人