自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘建的博客

不往前走,永远不会发现前面会出现什么风景

  • 博客(38)
  • 资源 (6)
  • 收藏
  • 关注

原创 Google FCM推送后台通知铃声自定义

   记录一下工作中遇到的另一个坑,也跟通知有关,这个问题也耗了我完完整整两天的时间,百度google也没有找到完整的解决办法,只能自己摸索。  在fcm推送sdk10.0.1版本之前,我们可以在FirebaseMessagingService的zzm()方法中进行后台及应用杀掉后的推送处理,在这里我们可以自定义自己的通知铃声和振动设置。由于相关合规的问题在...

2018-08-11 18:39:20 4247

原创 Android8.0 NotificationChannel修改铃声和振动的坑

   记录一下工作中遇到的一些坑,都是一些网上没有找到解决办法自己摸索出来的一些东西。希望让有需要的人少踩一些坑  Android8.0以下Google推出了NotificationChannel渠道的概念,对于NotificationChannel我们可以通过以下方式来设置铃声和振动。 NotificationChanne...

2018-08-11 17:56:47 19043 14

原创 自定义View(四)弹性滑动Scroller

Scroller是什么 Scroller就是一个滑动帮助类。它并不可以使View真正的滑动,而是配合scrollTo/ScrollBy让view产生缓慢的滑动,产生动画的效果,其实和属性动画是同一个原理。在我看来,Scroller跟属性动画的平移的效果是一样的。如何使用 //①实例一个Scroller,它有三个构造方法如下 //public Scroller (Context

2017-12-24 11:54:56 413

原创 自定义ScrollView实现下拉放大头部图片

下拉实现放大头部布局,先看一下下图的效果:代码实现如下:public class HeadZoomScrollView extends ScrollView { private View mZoomView; private int mZoomViewWidth; private int mZoomViewHeight; private float firstPosit

2017-10-22 12:15:59 1031

原创 Rxjava2和Retrofit2网络库的封装

Rxjava2和Retrofit2网络库的封装,支持文件下载监听,单文件/多文件上传监听,支持https ,详细代码见我的Gitbub:https://github.com/makewhat/RetrofitClient

2017-10-22 10:46:02 533

原创 Android Mvp+DataBinding架构模式详解

MVP模式的使用一. MVC与MVP设计模式的区别MVC:用户发出事件的时候,view层发出指令到controller层,controller层去通知model层更新数据,更新完数据后返回给view层展示。MVC反映到Android工程上V:layout.xml布局文件就相应于MVC的View层M:各种javaBean,第三方库类,ApiService,一系列helper和managerC:a

2017-10-22 10:28:34 1124

原创 Rxjava2.x很详细的介绍

Rxjava详解Rxjava的优点: 链式调用,代码调用流程异常清晰 ,代码简洁。RxJava和EventBus一样也是基于观察者模式,但是使用的场景确实异步数据流的处理RxJava更加强大,利用操作符它可以对发出的消息进行一系列的变换引入依赖: compile 'io.reactivex.rxjava2:rxjava:2.0.1' compile 'io.re

2017-10-02 14:36:22 400

原创 Gradle细节详解及多渠道打包

Gradle使用详解1.gradle构建系统的目标让重用资源变得更加容易让创建同一应用程序的不同版本变得更加容易,无论是多个apk发布版本还是同一个应用的不同定制版本。让构建过程变得更加容易配置,扩展和定制。2.几个有用的Gradle命令 - ./gradlew -v 版本号 - ./gradlew clean 清除app/目录下的build文件夹 - ./gr

2017-07-16 13:59:24 4768

原创 自定义View基础(三)View的绘图篇

把自己整理的发出来,具体Demo就不放了1.Paint类:画笔类        void  setAlpha(int a)  设置alpha不透明度,范围为0~255      void  setAntiAlias(boolean aa)  //是否抗锯齿,边缘更清晰一些,锯齿痕迹不会那么明显。但会消耗较大资源,绘制图形速度会变慢。      void  setColo

2017-01-16 19:21:29 468

原创 自定义View基础(二)事件分发机制

消息事件传递流程         对于一个根ViewGroup来说,当事件发生时,会调用它的dispatchTouchEvent(MotionEvent ev)方法进行事件的分发,判断根 ViewGroup的onInterceptTouchEvent(MotionEvent ev)是否为true,return true则会把事件拦截交给这个ViewGroup处理,调用该ViewGrouponT

2017-01-16 17:58:06 401

原创 自定义View基础(一)View的绘制流程

自从十月份来到这家公司,大概有三个多月没更新博客了,主要是太忙,996的工作节奏着实让人没有太多的空闲时间去整理学习,其实也不想抱怨太多,既来之则安之吧。       公司是做股票财经类软件的,对自定义View这一块要求比较多吧。所以这一系列文章想对自定义View做一个学习总结,从绘制流程,事件分发机制,绘图,自定义ViewGroup,自定义分时K线图做一个整体的整理和学习。本篇从View的绘

2017-01-16 15:37:06 2069

原创 Android之IntentService完全解析

我们先不扯IntentService是什么什么的,扯那么东西都太空洞,不如看源码来的深刻IntentService源码 public abstract class IntentService extends Service { private volatile Looper mServiceLooper; private volatile ServiceHandle

2016-10-14 22:26:48 327

原创 Android之HandlerThread完全解析

上周辞职了空出来一周时间来,本来想好好充充能, 结果这几天同学过来找工作,陪他跑了好几天,

2016-10-14 20:04:05 447

原创 Android消息机制Handler的原理详解

Handler的作用   大家都知道,Handler是用来做子线程和UI线程之间的通信的,在子线程进行耗时的操作,然后通过Handler将消息传递到主线程中进行UI操作。大家有没有一个疑问,为什么不能在子线程更新UI?这是因为ViewRootImpl对UI操作做了验证   void checkThread(){ if(mThread!=Thread.curr

2016-10-08 15:17:39 846

原创 Retrofit2.0详解(一简单使用)

几个月前,对Retrofit进行了一个系统的学习,不过没有做一个整理和总结,正好国庆没什么事就写几篇博客对Retrofit的简单使用,上传下载进度监听,封装使用,源码解析做一个学习,记录如下1~简单使用      由于retrofit2.0与先前版本的差别还是比较大,对于不同版本之间的差异在这里就不在进行详细区别。下面的例子也是针对于retrofit2.0进行介绍的。retro

2016-10-07 11:30:34 2872

原创 Okio的使用和源码解析

一.java NIO和堵塞I/O的区别   1.阻塞I/O通信模型:     阻塞I/O在调用InputStream.read()方法时是阻塞的,它会一直等到数据到来时才会返回         2.java NIO原理及通信模型     Java NIO是在jdk1.4开始使用的,是一种非阻塞式的I/O     java NIO的工作原理:       (1)Jav

2016-10-07 10:05:53 3479

原创 RxJava学习(四利用RxJava打造自己的RxBus)

前面说过Rxjava的功能很强大,不仅仅是实现链式的异步操作,它的功能很强大还可以通过RxBus实现EventBus的消息/事件传递功能,我们来看看RxBuspackage com.example.liujian.rxjavademo;import java.util.HashMap;import rx.Observable;import rx.Subscriptio

2016-10-06 16:01:46 1457

原创 Rxjava学习(三线程调度器Scheduler)

我们知道,RxJava最主要的特点就是异步操作,它的异步操作就是用Scheduler来指定Observable和Subscriber所运行的线程,在默认情况下,即在不指定线程的情况下,RxJava遵循的是线程不变的原则,即:在哪个线程生产事件,就在哪个线程消费事件Schedulers线程调度器我们来看一下Schedulers的分类:(1)Schedulers.i

2016-10-06 15:35:54 500

原创 Rxjava学习(二操作符)

上一篇说道我们可以利用操作符对Observable发出的消息进行拦截和修改,Rxjava的操作符很多,这里只介绍几种常用的filter  filter()操作符是可以对Observable流程的数据进行一层过滤处理,返回一个新的Observable,filter()返回为false的值将不会发出到Subscriber,我们来看下具体的代码  Observable.just("2

2016-10-06 15:24:01 274

原创 Rxjava学习(一基础篇)

一.Rxjava跟EventBus的    RxJava 是一个响应式编程框架,通过一种扩展的观察者设计模式来实现异步操作。 跟AsyncTask和Handler类似,但是比AsyncTask和Handler更加简洁随着程序逻辑变得越来越复杂,它依然能够保持逻辑的简洁。另外还可以自己封装一个RxBus进行消息事件的传递,有人可能会问这些功能EventBus也能够做,那么为什么还需要Rx

2016-10-05 23:25:47 613

原创 EventBus3.0的使用详解

学习一种技术我们先得了解下为什么要学习,它的优点是什么。 对于EventBus的话,我想作用大概有如下两点:代替Thread+Handler的线程间通信方式和代替回调,EventBus主要用来做消息/事件的传递,可以代替传Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递消息,开销更小,代码更加简洁易懂,其实主要作用

2016-10-05 22:13:59 370

转载 Android DataBinding(MVVM设计模式)

在网上找了很多MVVM的技术博客,大多讲的云里雾里不知所云,但是发现这一篇讲的还不错,适合入门,转载一下什么是MVVM说到DataBinding,就有必要先提起MVVM设计模式。Model–View–ViewModel(MVVM) 是一个软件架构设计模式,相比MVVM,大家对MVC或MVP可能会更加熟悉。MVC:(VIew-Model-Controller)早期

2016-10-03 19:06:44 811

原创 OkHttp3源码详解(二整体流程)

一.初始化OkHttpClient对OKHttpClient初始化无非就是对OkHttp的一些配置,我们先来了解下OkHttp中的一些类  Protocol  存放Http协议的一个枚举类,比如Http1.0,http1.1,spdy3.2,Http2.0ConnectionSpec   连接规范,用来配置Socket连接层,对于HTTPS,还能配置安全传输

2016-09-30 09:20:03 6356

原创 Android性能优化-布局篇

一.布局优化   1.app里的每一个view,android系统都会经过三部曲来渲染:measure,layout,draw。measure从最顶部的节点开始,   顺着layout树形结构依次往下,测量每个view需要在屏幕当中展示的尺寸大小,节点所处位置越深,套嵌带来的measure越多,计算就会越费时      2.HierarchyViewer和lint工具

2016-09-21 21:39:33 380

原创 Android性能优化终结-内存篇

1.java垃圾回收机制gc   (1)垃圾回收的优缺点:        优点:           垃圾回收器释放丢弃对象所占的内存空间,当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用           在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。

2016-09-16 15:42:40 1429 1

转载 java垃圾回收机制

1. 垃圾回收的意义  在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用。事实上,除了释放

2016-09-13 11:23:52 399

原创 OkHttp3源码详解(一Request类)

上次在哪篇博客看到这句话,我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造,我觉得很有道理对于用到项目的某个开源项目我们不应该只停留在会用的阶段,废话不多说,直接开始okhttp源码的学习之路

2016-09-03 23:04:26 12230

原创 Android之基于HTTP协议的通信详解

搞计算机必须得有理论指导实践,否则只能像个没头苍蝇到处乱撞。              最近在研究网络编程,http协议是必须要去熟悉的,所以花了一个周末的时间对以前的学习笔记进行了整理,这里就直接copy了 一.HTTP协议:   1.HTTP协议用于定义客户端与web服务器进行交互的格式   2.HTTP是hypertext transfer protocol(超文

2016-08-21 20:12:03 2712

原创 AsyncTask源码详解

虽然AsyncTask现在用的很少,但是面试的时候还是会被问到,所以是时间好好研究一下AsyncTask的源码了首先来看一下execute方法的逻辑: @MainThread public final AsyncTask execute(Params... params) { return executeOnExecutor(sDefaultExecuto

2016-08-13 18:47:17 1354

原创 Android线程池源码解析

上一篇博客大概了解了下线程池是什么,这篇博客将在源码的基础上去验证上一篇博客中提到的Thread执行流程。我的博客保证是一个字一个字敲出来的    1.线程池源码解析    在ThreadPoolExecutor类中,最核心的任务提交方法是execute()方法,所以就先从execte方法开始来看看线程池的执行流程:    public void execute(R

2016-08-12 10:01:47 921

原创 Android线程池详解

最近在看OkHttp的源码,看着看着就看到了有线程池的地方,以前自己对这个东西就也就感到云里雾里的,所以想把线程池的知识点和源码完整的看一篇     1.线程池有什么用?    a.重用线程池中存在的线程,避免因为线程的大量创建和销毁所带来的性能开销 ,完成一项任务的时间T=创建线程的时间+在线程中执行任务的时间+线程销毁的时间, 而线程池的出现可以大大减少创建线程的时间和线程销毁

2016-08-11 17:48:45 1400

原创 Android技术周报(Android性能优化总结)

1、Android性能优化第(一)篇---基本概念http://www.jianshu.com/p/c0e5c13d5ecb第一篇简单回顾java的内存区域划分、引用、内存泄露以及场景,还有垃圾回收2、Android性能优化第(二)篇---Memory Monitor检测内存泄露http://www.jianshu.com/p/ef9081050f5c第二篇主要是使用过Andr

2017-02-18 19:48:11 500

转载 java SSLSocket的详解

1. 什么是SSLSocketJDK文档指出,SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添加了安全保护层。具体安全方面的讨论见下一篇。本篇重点关注SSLSocket及相关几个类的使用。 2. SSLSocket和相关类SSLSocket来自jsse(

2016-08-30 19:46:16 14194 1

转载 socket和http的区别

相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。 1、TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。 建立起一个TCP连接需要经过“三次握手”: 第一

2016-08-22 20:22:45 318

原创 OkHttp的使用详解

一.说明         虽说现在网络层框架很多,比如volley,nohttp,okhttp等等,但是目前okhttp还是用的最多的。所以说详细的了解okhttp的使用,源码解析和okhttp的封装是十分必要的,这一系列文章将从okhttp的使用开始        OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。默

2016-08-20 15:08:59 2785

转载 Android并发编程之volatile关键字

转载于http://blog.csdn.net/nugongahou110   相信很多人对于volatile关键字既熟悉又陌生,熟悉是对这个名字很熟悉,陌生是对他的原理和用法很陌生,最近几天通过查阅大量资料和书,终于对volatile有了一定的理解,写此博客一来做了记录,二来使大家减少学习成本volatile为什么不能保证原子性?现在我们的手机都是多核的,也就是说同时有好几颗

2016-08-12 17:48:12 847

原创 自己动手实现CircleImageView

项目需要用到圆形的ImageView,所以自己就动手实现了一个, 这里只讲一下实现思路,项目源码我已经上传到github,下载地址放在文章的末尾   实现步骤:    1.getDrawable()方法获取到设置的图片    2.Drawable转Bitmap,此处一定要小心,不要用BitmapDrawable的getBitmap()方法去转,我之前就是用这种方法,最后结合Glid

2016-07-17 10:25:42 433

原创 android图片压缩工具类

好久没写博客了,一方面是因为最近找了家实习单位,很累基本上下班后就没有打不起精神去学习,另一方面我自己觉得写博客确实有点耗时间,趁着周六周日想花点时间研究下fresco,picass,Glide等框架,但是如何哪种框架,Bitmap总是基础,花了一上午的时间整理了下bitmap压缩的工具类,这里分享一下  package com.example.liujian.bitmapdemo;imp

2016-07-16 13:43:19 638

DrawerLayout实现QQ5.2侧滑效果

DrawerLayout高仿QQ5.2侧滑效果

2016-01-18

qq侧滑效果

安卓自定义HorizontalScrollView实现QQ的侧滑效果,史上最简单的一种侧滑方法

2016-01-17

SlidingMenu

自定义HorizontalScrollView实现最简单的侧滑效果

2016-01-17

自定义HorizontalScrollView

自定义HorizontalScrollView实现Gallery效果,类似于ViewPager+HorizontalScrollView效果

2016-01-14

ViewPager实现TabHost

viewPager实现tabHost的效果。代码供下载学习

2016-01-07

Fragment实现qq底部标签栏

用Fragment来模仿QQ,微信,等App的底部状态栏效果。代码供学习.

2016-01-06

空空如也

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

TA关注的人

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