- 博客(259)
- 资源 (30)
- 问答 (3)
- 收藏
- 关注
原创 CountDownLatch介绍
在项目中,我们通常会执行一些耗时操作,有的时候是同时执行若干个,然后执行完了还要等结果。通常我们会怎么做呢?Handler,或者runOnUIThread。但是有没有别的选择了呢?有的,就是CountDownLatch先来看个例子public class MainActivity extends Activity { private ArrayList<Integer> ...
2018-12-02 19:53:30
344
原创 编译时注解(三)Arouter源码讲解
项目中我们有时需要跨模块startActivity,但是这样需要配置menifest,不方便。这时就需要阿里的一个路由框架ArouterArouter的使用就不再多说了。这篇文章主要讲解他的源码1.初始化ARouter.init( this );public static void init(Application application) { if (!hasInit) ...
2018-12-02 14:08:54
524
转载 编译时注解(二)JavaPoet的使用
上一篇文章提到AbstractProcessor中生成java类,可以使用JavaPoet开源库进行编写。但是有个问题,addModifier提示无法找到Modifier,其实只要把compile project(’:libprocess’)改成annotationProcessor project(’:libprocess’)就可以了。但是这么一来定义的MethodProcessor就...
2018-11-18 13:53:48
420
原创 编译时注解(一)AbstractProcessor实战
Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的。我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。下面便入手学习下Java注解处理器。简单实践:1.创建注解@Target({ElementType.TYPE})@Retention(Retent...
2018-11-04 14:14:26
1855
原创 okhttp拦截器的使用------修改baseurl
有的时候做项目的时候会遇到调用接口的url和之前接口定义的url不一样,很可能连retrofit已经设置好的baseurl都要换,但是retrofit并没有提供修改baseurl的方法。那我们只能通过别的方式,比如通过拦截器修改baseurlpublic class MainActivity extends AppCompatActivity { private static S...
2018-07-21 14:42:39
3956
原创 Bitmap详解
1.bitmap占多少内存getByteCount()方法是在API12加入的,代表存储Bitmap的色素需要的最少内存。API19开始getAllocationByteCount()方法代替了getByteCount()。 这是API26的 public final int getByteCount() { if (mRecycled) { ...
2018-07-15 16:03:26
1051
原创 嵌套滑动机制详解
嵌套滑动机制主要涉及两个接口public interface NestedScrollingChild { void setNestedScrollingEnabled(boolean var1); boolean isNestedScrollingEnabled(); boolean startNestedScroll(int var1);//开启嵌套滚动流程
2018-01-24 17:09:21
943
转载 嵌套滑动机制探究
https://www.cnblogs.com/wjtaigwh/p/6398562.html https://segmentfault.com/a/1190000002873657按照上面的例子打了log滑动开始E/child: startNestedScrollE/parent: onStartNestedScroll----------------------决定是否要配合其进行嵌套滚动
2017-12-27 17:27:13
339
原创 Promise
promise就是一个对象,用来传递异步操作的消息,它代表未来才会知道的结果。 它有两个特点 (1)对象状态不受外界影响。3种状态(进行中pending,已完成resolved,已失败rejected) (2)一旦状态改变就不会再变。状态改变只有两种可能(pending->resolved,pending->rejected) 缺点 (1)无法取消 (2)不设置回调函数,内部错误不会反应
2017-10-17 22:05:54
292
原创 java虚拟机和内存模型
1.垃圾收集器概述垃圾收集器(Garbage Collection),通常被称作GC。 GC主要做了两个工作,一个是内存的划分和分配,一个是对垃圾进行回收。 关于对垃圾进行回收,被引用的对象是存活的对象,而不被引用的对象是死亡的对象也就是垃圾,GC要区分出存活的对象和死亡的对象,也就是垃圾标记,并对垃圾进行回收。2.垃圾标记算法在对垃圾进行回收前,GC要先标记出垃圾,那么如何标记呢,目前有两种垃
2017-10-12 15:43:58
305
原创 retrofit的使用
1.动态代理 http://blog.youkuaiyun.com/lxj1137800599/article/details/760221412.常见注解说明 (1)一般的getpublic interface IUserBiz{ @GET("users") Call<List<User>> getUsers();}@GET中所填写的value和baseUrl组成完整的路径 (2)动态
2017-10-12 15:39:03
288
原创 observeOn()与subscribeOn()的区别
Observable.just("RxJava") .map(new Function<String, String>() { @Override public String apply(@NonNull String s) throws Exception {
2017-10-12 15:31:04
2139
原创 android全局替换字体最新方案
github上有一个Calligraphy库,这个库可以用来替换字体。核心代码就是CalligraphyLayoutInflater,它继承默认LayoutInflater并且取代默认inflater来渲染整个图层。当你设置好了字体以后自然就会用新字体来渲染文字。但问题是,现在这个库只能实现一开始加载的时候渲染文字,那如果我正在一个Activity里面操作,里面有viewpager,fragment
2017-09-26 15:23:26
2576
原创 RN刷新回调
有的时候我们需要从A进入B,然后B返回到A,A同时也需要刷新A的代码(在进入B时传入刷新要用到的函数)goGouWu() { //alert('点击了去购物车'); const { navigator } = this.props; //为什么这里可以取得 props.navigator?请看上文: //<Component {...r
2017-09-10 18:01:44
1350
原创 RN监听返回键
BackAndroid已经被废弃。改用BackHandler 关键代码componentWillMount() { if (Platform.OS === 'android') { this.listener = BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);
2017-09-10 17:56:31
4628
原创 使用TabLayout遇到的几个坑
1.setupWithViewPager以后之前已经设置好的tab的视图消失了看源码: setupWithViewPager里面有这段 final PagerAdapter adapter = viewPager.getAdapter(); if (adapter != null) { // Now we'll popu
2017-09-06 14:59:52
3291
原创 强制获取焦点
private void getFocus(int index) { mEditTexts[index].setFocusable(true);//设置输入框可聚集 mEditTexts[index].setFocusableInTouchMode(true);//设置触摸聚焦 mEditTexts[index].requestFocus();//请求
2017-09-04 16:17:20
678
原创 正则表达式
//^ 匹配输入字符串开始的位置 //$ 匹配输入字符串结尾的位置 //* 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配z,zo,zoo等 Pattern p = Pattern.compile("^zo*$"); Matcher m = p.matcher("zooo"); System.out.println("*测试:" + m.matche
2017-09-04 15:03:54
297
原创 React Native的模态,AsyncStorage,DeviceEventEmitter
1.模态modalA界面<Modal animationType='slide' transparent={false} visible={this.state.isModal} onRequestClose={() => this.onRequestClose()}> <HalfHourHot removeModal={(data) => this.clos
2017-08-30 22:05:01
333
原创 RN实现TabNavigator
(1)实现import React, {Component} from 'react';import { StyleSheet, Text, View, //Navigator, Image} from 'react-native';import Home from '../home/GDHome';import HourList from '../ho
2017-08-27 10:12:32
1016
原创 RN实现头部NavBar
(1)实现NavBarimport React, {Component, PropTypes} from 'react';import { AppRegistry, StyleSheet, Text, View, Dimensions, Platform} from 'react-native';const {width, height} = Di
2017-08-27 10:11:11
856
原创 RN实现ListView
(1)实现单个itemimport React, {Component, PropTypes} from 'react';import { AppRegistry, StyleSheet, Text, View, Dimensions, Platform, Image} from 'react-native';const {width, h
2017-08-27 10:10:17
909
原创 Okhttp3 Interceptor
这些都是要添加进去的Interceptor。最终执行网络请求的就只有CallServerInterceptor,其他都是用来过滤,重定向的 List<Interceptor> interceptors = new ArrayList<>(); interceptors.addAll(client.interceptors()); interceptors.add(retryAn
2017-08-24 15:23:27
583
原创 Glide中request的调用和管理
先介绍一个数据结构WeakHashMap WeakHashMap大致上就是,通过WeakReference和ReferenceQueue实现的。 WeakHashMap是通过数组table保存Entry(键值对),Entry继承WeakReference,最终继承Reference WeakHashMap还有ReferenceQueue,是一个队列,它会保存被GC回收的“弱键”。 问题:如何
2017-08-23 16:41:22
2285
原创 Glide生命周期管理
Glide.with里面有这段代码public RequestManager get(Activity activity) { if (Util.isOnBackgroundThread()) { return get(activity.getApplicationContext()); } else { assertN
2017-08-23 16:35:06
425
原创 Glide缓存机制
1.LinkedHashMap——http://blog.youkuaiyun.com/lxj1137800599/article/details/54976180 2.cleanupCallable(涉及到ThreadPoolExecutor——http://blog.youkuaiyun.com/lxj1137800599/article/details/55808019)private final Callable
2017-08-23 16:25:02
313
原创 Rxjava2学习
1.去重Flowable.just(1, 1, 1, 2, 2, 3, 4, 5) .distinct() .subscribe(new Consumer<Integer>() { @Override public void accept(Integer i
2017-08-18 16:14:11
326
原创 android studio使用ndk编程的注意点
1.无法确定AssetManager的签名 这是因为native函数中存在不常用的类,而我们需要,唯一的方法就是从sdk中取出android.jar,后缀名改成rar,然后解压到某个目录,最后在javah中添加bootstrapclass指令javah -bootclasspath ./../android -d ../jni -jni test.ndkdemo.PrintUtilbootclas
2017-08-18 13:14:30
403
原创 android studio在ndk中打log
android.ndk { moduleName = "JniLib"//so库的名字 ldLibs.addAll(['android', 'log']) }新版的dsl像上面添加(现在基本都是新版的) 旧版的 ldLibs “log”然后将下面的代码弄成log.h方便调用#ifndef _LOG_H_#define _LOG_H_#include
2017-08-18 11:07:42
578
原创 android studio编写jni,ndk程序(不用mk文件)
1.快速生成头文件(1)打开as的Terminal,输入cd app/src/main/java (2)通过javah生成头文件:javah -d ../jni -jni test.ndkdemo.PrintUtil(包名+类名,而且不要再MainActivity里面定义native函数) 参考:http://blog.youkuaiyun.com/lvxiangan/article/details/523
2017-08-18 10:33:13
554
原创 动态代理
1.重要参数:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。 (1)InvocationHandler 每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象
2017-07-24 16:17:47
391
原创 类加载器
类加载器基本概念顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示
2017-07-20 15:32:47
227
原创 源码阅读--腾讯Tinker热修复框架
先要配置这么一段话:后面会谈到为什么以及如何改变这些默认设置 public static void installTinker(ApplicationLike appLike) { //or you can just use DefaultLoadReporter LoadReporter loadReporter = new DefaultLoadReport
2017-07-19 16:44:32
350
原创 bootstrap学习
准备工作:head中包含以下代码:<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- 上述3个meta标签
2017-07-16 08:29:07
855
原创 js事件浏览器兼容案例
var EventUtil = { //返回对event对象的引用 getEvent: function (event) { return event ? event : window.event; }, //返回事件的目标 getTarget: function (event) { return event.target ||
2017-07-16 08:23:30
299
翻译 css整理
**背景色**:background-color**背景图像**:background-image。用法实例:body {background-image: url(/i/eg_bg_04.gif);}**背景重复**:background-repeat: repeat-y;——也可以是repeat-x,no-repeat**背景定位**:background-position:center
2017-06-29 17:16:29
325
转载 原型和闭包(整理)
匿名函数:function后面没有标识符。匿名函数中this指向window 闭包:有权访问另一个作用域中的变量的函数。有两种情况:函数作为返回值(在一个函数内部创建另一个函数),函数作为参数传递每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个proto,可成为隐式原型。访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着proto这条链向上找,
2017-06-23 23:02:34
385
翻译 创建对象和继承
1.创建对象//工厂模式---无法识别对象,无法知道对象类型function createPerson(name, age) { var person = new Object(); person.name = name; person.age = age; person.sayName = function () { alert(this.name)
2017-06-18 21:41:01
282
原创 volatile,synchronized,ReentrantLock
synchronized实现机制:反编译以后monitor 优化:自旋锁,适应自旋锁,轻量级锁等 所谓自旋锁,就是让该线程等待一段时间,不会被立即挂起,看持有锁的线程是否会很快释放锁。怎么等待呢?执行一段无意义的循环即可(自旋)。 虽然可以避免线程切换带来的开销,但是占用处理器时间volatile原子性:一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。(v
2017-06-14 17:20:22
318
ViewPager的使用
2016-03-08
酷欧天气.rar
2016-02-24
数独游戏代码
2016-02-19
bindservice
2016-01-11
AccountMS.rar
2015-12-28
jar嵌套导致资源找不到
2018-02-13
jni多次将一张图片二值化却获得相同的效果
2016-11-17
jni调用的函数和native函数不在一个java文件内,调用出错
2016-08-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人