自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(259)
  • 资源 (30)
  • 问答 (3)
  • 收藏
  • 关注

原创 CountDownLatch介绍

在项目中,我们通常会执行一些耗时操作,有的时候是同时执行若干个,然后执行完了还要等结果。通常我们会怎么做呢?Handler,或者runOnUIThread。但是有没有别的选择了呢?有的,就是CountDownLatch先来看个例子public class MainActivity extends Activity { private ArrayList<Integer> ...

2018-12-02 19:53:30 296

原创 编译时注解(三)Arouter源码讲解

项目中我们有时需要跨模块startActivity,但是这样需要配置menifest,不方便。这时就需要阿里的一个路由框架ArouterArouter的使用就不再多说了。这篇文章主要讲解他的源码1.初始化ARouter.init( this );public static void init(Application application) { if (!hasInit) ...

2018-12-02 14:08:54 461

转载 编译时注解(二)JavaPoet的使用

上一篇文章提到AbstractProcessor中生成java类,可以使用JavaPoet开源库进行编写。但是有个问题,addModifier提示无法找到Modifier,其实只要把compile project(’:libprocess’)改成annotationProcessor project(’:libprocess’)就可以了。但是这么一来定义的MethodProcessor就...

2018-11-18 13:53:48 330 1

原创 编译时注解(一)AbstractProcessor实战

Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的。我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compile time)处理的注解。下面便入手学习下Java注解处理器。简单实践:1.创建注解@Target({ElementType.TYPE})@Retention(Retent...

2018-11-04 14:14:26 1793

原创 okhttp拦截器的使用------修改baseurl

有的时候做项目的时候会遇到调用接口的url和之前接口定义的url不一样,很可能连retrofit已经设置好的baseurl都要换,但是retrofit并没有提供修改baseurl的方法。那我们只能通过别的方式,比如通过拦截器修改baseurlpublic class MainActivity extends AppCompatActivity { private static S...

2018-07-21 14:42:39 3798

原创 Bitmap详解

1.bitmap占多少内存getByteCount()方法是在API12加入的,代表存储Bitmap的色素需要的最少内存。API19开始getAllocationByteCount()方法代替了getByteCount()。 这是API26的 public final int getByteCount() { if (mRecycled) { ...

2018-07-15 16:03:26 962

原创 嵌套滑动机制详解

嵌套滑动机制主要涉及两个接口public interface NestedScrollingChild { void setNestedScrollingEnabled(boolean var1); boolean isNestedScrollingEnabled(); boolean startNestedScroll(int var1);//开启嵌套滚动流程

2018-01-24 17:09:21 792 1

转载 嵌套滑动机制探究

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 293

原创 Promise

promise就是一个对象,用来传递异步操作的消息,它代表未来才会知道的结果。 它有两个特点 (1)对象状态不受外界影响。3种状态(进行中pending,已完成resolved,已失败rejected) (2)一旦状态改变就不会再变。状态改变只有两种可能(pending->resolved,pending->rejected) 缺点 (1)无法取消 (2)不设置回调函数,内部错误不会反应

2017-10-17 22:05:54 259

原创 java虚拟机和内存模型

1.垃圾收集器概述垃圾收集器(Garbage Collection),通常被称作GC。 GC主要做了两个工作,一个是内存的划分和分配,一个是对垃圾进行回收。 关于对垃圾进行回收,被引用的对象是存活的对象,而不被引用的对象是死亡的对象也就是垃圾,GC要区分出存活的对象和死亡的对象,也就是垃圾标记,并对垃圾进行回收。2.垃圾标记算法在对垃圾进行回收前,GC要先标记出垃圾,那么如何标记呢,目前有两种垃

2017-10-12 15:43:58 265

原创 retrofit的使用

1.动态代理 http://blog.csdn.net/lxj1137800599/article/details/760221412.常见注解说明 (1)一般的getpublic interface IUserBiz{ @GET("users") Call<List<User>> getUsers();}@GET中所填写的value和baseUrl组成完整的路径 (2)动态

2017-10-12 15:39:03 255

原创 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 2060

原创 android全局替换字体最新方案

github上有一个Calligraphy库,这个库可以用来替换字体。核心代码就是CalligraphyLayoutInflater,它继承默认LayoutInflater并且取代默认inflater来渲染整个图层。当你设置好了字体以后自然就会用新字体来渲染文字。但问题是,现在这个库只能实现一开始加载的时候渲染文字,那如果我正在一个Activity里面操作,里面有viewpager,fragment

2017-09-26 15:23:26 2485

原创 RN刷新回调

有的时候我们需要从A进入B,然后B返回到A,A同时也需要刷新A的代码(在进入B时传入刷新要用到的函数)goGouWu() { //alert('点击了去购物车'); const { navigator } = this.props; //为什么这里可以取得 props.navigator?请看上文: //<Component {...r

2017-09-10 18:01:44 1303

原创 RN监听返回键

BackAndroid已经被废弃。改用BackHandler 关键代码componentWillMount() { if (Platform.OS === 'android') { this.listener = BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);

2017-09-10 17:56:31 4547

原创 使用TabLayout遇到的几个坑

1.setupWithViewPager以后之前已经设置好的tab的视图消失了看源码: setupWithViewPager里面有这段 final PagerAdapter adapter = viewPager.getAdapter(); if (adapter != null) { // Now we'll popu

2017-09-06 14:59:52 3196 1

原创 强制获取焦点

private void getFocus(int index) { mEditTexts[index].setFocusable(true);//设置输入框可聚集 mEditTexts[index].setFocusableInTouchMode(true);//设置触摸聚焦 mEditTexts[index].requestFocus();//请求

2017-09-04 16:17:20 594

原创 正则表达式

//^ 匹配输入字符串开始的位置 //$ 匹配输入字符串结尾的位置 //* 零次或多次匹配前面的字符或子表达式。例如,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 255

原创 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 294 2

原创 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 974

原创 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 824

原创 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 870

原创 Okhttp3 Interceptor

这些都是要添加进去的Interceptor。最终执行网络请求的就只有CallServerInterceptor,其他都是用来过滤,重定向的 List<Interceptor> interceptors = new ArrayList<>(); interceptors.addAll(client.interceptors()); interceptors.add(retryAn

2017-08-24 15:23:27 529

原创 Glide中request的调用和管理

先介绍一个数据结构WeakHashMap WeakHashMap大致上就是,通过WeakReference和ReferenceQueue实现的。 WeakHashMap是通过数组table保存Entry(键值对),Entry继承WeakReference,最终继承Reference WeakHashMap还有ReferenceQueue,是一个队列,它会保存被GC回收的“弱键”。 问题:如何

2017-08-23 16:41:22 2244

原创 Glide生命周期管理

Glide.with里面有这段代码public RequestManager get(Activity activity) { if (Util.isOnBackgroundThread()) { return get(activity.getApplicationContext()); } else { assertN

2017-08-23 16:35:06 389

原创 Glide缓存机制

1.LinkedHashMap——http://blog.csdn.net/lxj1137800599/article/details/54976180 2.cleanupCallable(涉及到ThreadPoolExecutor——http://blog.csdn.net/lxj1137800599/article/details/55808019)private final Callable

2017-08-23 16:25:02 284

原创 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 290

原创 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 368

原创 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 521

原创 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.csdn.net/lvxiangan/article/details/523

2017-08-18 10:33:13 487

原创 动态代理

1.重要参数:在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。 (1)InvocationHandler 每一个动态代理类都必须要实现InvocationHandler这个接口,并且每个代理类的实例都关联到了一个handler,当我们通过代理对象

2017-07-24 16:17:47 337

原创 类加载器

类加载器基本概念顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示

2017-07-20 15:32:47 199

原创 源码阅读--腾讯Tinker热修复框架

先要配置这么一段话:后面会谈到为什么以及如何改变这些默认设置 public static void installTinker(ApplicationLike appLike) { //or you can just use DefaultLoadReporter LoadReporter loadReporter = new DefaultLoadReport

2017-07-19 16:44:32 329

原创 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 805

原创 js事件浏览器兼容案例

var EventUtil = { //返回对event对象的引用 getEvent: function (event) { return event ? event : window.event; }, //返回事件的目标 getTarget: function (event) { return event.target ||

2017-07-16 08:23:30 248

转载 post和get的区别

参考:菜鸟学院

2017-07-06 09:49:17 182

翻译 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 290

转载 原型和闭包(整理)

匿名函数:function后面没有标识符。匿名函数中this指向window 闭包:有权访问另一个作用域中的变量的函数。有两种情况:函数作为返回值(在一个函数内部创建另一个函数),函数作为参数传递每个函数function都有一个prototype,即原型。这里再加一句话——每个对象都有一个proto,可成为隐式原型。访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着proto这条链向上找,

2017-06-23 23:02:34 350

翻译 创建对象和继承

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 250

原创 volatile,synchronized,ReentrantLock

synchronized实现机制:反编译以后monitor 优化:自旋锁,适应自旋锁,轻量级锁等 所谓自旋锁,就是让该线程等待一段时间,不会被立即挂起,看持有锁的线程是否会很快释放锁。怎么等待呢?执行一段无意义的循环即可(自旋)。 虽然可以避免线程切换带来的开销,但是占用处理器时间volatile原子性:一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。(v

2017-06-14 17:20:22 286

MyImageLoader

MyImageLoader

2016-09-12

DispatchEvent

DispatchEvent

2016-08-24

ListHeader2

ListHeader2

2016-07-09

ListHeader2.

ListHeader2.

2016-06-24

pdfview.rar

pdfview.rar

2016-06-16

ActionBarTest

ActionBar.

2016-06-13

加载gif.rar

加载gif

2016-06-12

sinaweibosdkdemo

sina.rar WeiboSDKDemo

2016-05-31

AlarmTest.rar

AlarmTest

2016-05-26

Phone_Guard

Phone_Guard

2016-05-24

手机守护神

手机守护神

2016-05-24

GameDemo.rar

GameDemo.rar

2016-05-13

BluetoothChat

根据官方给出的Demo修改而来

2016-05-09

BaiDuMapTest

百度地图在Android中的使用

2016-05-02

修改的语音聊天界面

修改的语音聊天界面

2016-04-20

自己写的语音聊天界面

语音聊天界面

2016-04-20

android在线支付

android在线支付,调用ping++API实现

2016-04-12

AIDL.rar示例

aidl(Android 接口定义语言 )

2016-04-05

多线程下载和断点下载

该Demo支持:多线程下载和断点下载

2016-03-14

MultiThreadDownload.rar

该Demo支持:多线程下载和断点下载

2016-03-14

SlideCut.rar

实现列表手势向左向右滑动删除条目

2016-03-12

( SlideCut.rar )

( SlideCut.rar )

2016-03-11

ViewPager的使用

在编写ViewPager的应用的使用,还需要使用两个组件类分别是PagerTitleStrip类和PagerTabStrip类,PagerTitleStrip类直接继承自ViewGroup类,而PagerTabStrip类继承PagerTitleStrip类,所以这两个类也是容器类。但是有一点需要注意,在定义XML的layout的时候,这两个类必须是ViewPager标签的子标签,不然会出错。

2016-03-08

酷欧天气.rar

一个功能较为完整的天气预报程序 1. 可以罗列出全国所有的省、市、县。 2. 可以查看全国任意城市的天气信息。 3. 可以自由地切换城市,去查看其他城市的天气。 4. 提供手动更新以及后台自动更新天气的功能。

2016-02-24

数独游戏代码

Game.java------数独游戏中的逻辑运算,包括计算一行或者一列未使用的数字 MainActivity.java------用来显示前面的界面,还包括menu选项 MyDialog.java------点击单元格显示的对话框 MyView.java------界面的生成,包括横线,数字

2016-02-19

bindservice

多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用,但是多次执行bindService)

2016-01-11

startservice

多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStartCommand()方法

2016-01-11

AccountMS.rar

// File dbFile = new File("/data/data/com.example.accountsoft.activity/databases/account.db"); // try { // dbFile.createNewFile(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // dbFile.delete();

2015-12-28

ToDoList.rar

Android4高级编程(第三版)4.5.8对ToDoList示例使用Fragment

2015-12-19

Fragment.rar

《Android从入门到精通》第五章:使用Fragment例子

2015-12-19

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

TA关注的人

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