自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 Android创建应用全局小窗口

需求描述 类似微信视频、语音时点击返回会形成一个App小窗口浮动在界面上,点击继续是通通话,如下图: 效果展示 技术分析 其实实现这个功能只需要你细心分析一下就有思路了:首先这个小窗口是浮动在app最上层的视图,其次所有触屏事件需先由该小窗口处理,还有就是小窗口的生命周期和Application也能虽可能不能同生,但是确是可以共死。所以可以在Applic...

2018-08-25 17:36:36 4925

原创 Retrofit+okHttp3一步一步封装MVP

Retrofit+okHttp3一步一步封装MVP Retrofit+okhttp3 是目前最流行的网络请求框架,本文主要说明MVP一步步封装,对于Retrofit不会过多讲解。MVP算是目前比较火的一想移动端的代码架构,采用Presenter隔离View层和Model层,解耦View层由于涉及过多逻辑而造成的代码臃肿,导致调试以及后期更改麻烦,下面开始一步一步搭建Retrofit+okH

2018-01-22 16:54:54 858

原创 自定义具有拉伸阻尼效果的ScrollerView

自定义具有拉伸阻尼效果的ScrollerView 引言 一切的自定义都是来自于需求,而在项目开发中由于界面条目太多,所以自然而然的使用到了ScrollerView,当把效果给产品经理的时候呢,ios和Android的效果完全不一样,ios自带的上下拉伸回弹的效果,而Android没有,所以自定义一个具有拉伸效果的ScrollerView迫在眉睫啊.首先来看一下效果图,妹子很漂亮,但是注意

2017-07-22 21:45:51 1880

原创 自定义ViewGroup之别踩白块

这篇文章通过自定义ViewGroup实现前段时间挺火的一个游戏——别踩白块。好了先看一下效果图:好了,下面我说一下我的思路,大家都知道重写ViewGroup的步骤:onMesure(),onDraw( ),onLayout(),这里我只需要重写onDraw()和onTouchEvent();好了,我首先创建的一个矩形类继承RectF类,创建了误了静态常量和两个构造函数:import android.

2017-05-03 14:40:44 690 1

原创 自定义ViewGroup实现轮播图

作为一名Android开发者对于自定义View的掌握体现利润他对控件的深入理解,我下面是自定义ViewGroup实现轮播图,先上个效果图吧:效果图就是这样,自动轮播,可对每张图片进行点击监听,接下来我们先看一下自定义ViewGroup实现实现的代码:public class ImageBannerViewGroup extends ViewGroup { private int lastX;

2017-03-27 08:49:27 664

原创 Fragment实现懒加载

引言Fragment是目前使用最广泛的组件之一,作为轻量级的布局承载组件,只有当它和v4包的ViewPager结合才是Perfect。在平常开发中,基本ViewPager中适配Fragment是必不可少的,然而当每个Fragment中的数据量大加载缓慢,在每个Fragment之间切换时将会不断地进行数据请求,对于ViewPager而言,他会默认加载当前可见的Fragment的前一个和后一个Fragm

2016-12-19 23:00:54 313

原创 Handler 之 Message的复用机制

Android如何处理消息?Android是基于消息驱动的系统,消息处理机制自然重中之重 ,一句话大体说一下:每个线程用过ThreadLocal保证存储的Looper线程唯一性,Looper.Preapre中会创建一个该线程的MessageQueue(一个存储Message的消息单链表),而将消息插入到MessageQueue的执行者就是Handler,所以一个线程中一个Looper,一个M...

2019-11-04 15:06:48 857

原创 Android中Dialog中的Window添加过程解析

Android中Dialog真的只能依赖Activity?Dialog一直作为一种依附在Activity上下文才能存在的窗口视图,那是否可以逃脱Activity的上下文,采用其他Context存在呢?答案是肯定的,Dialog完全可以不依赖Activity上下文存在,这里我们说的只是非Activity的Context,不是不依赖ContextDialog的组成:Dialog是一种承载W...

2019-06-14 19:54:20 2878

原创 Window添加悬浮窗解析

Window添加悬浮窗解析Window添加原理:window作为一种视图抽象承载者,唯一的实现类是PhoneWindow,PhoneWindow中包含一个视图结构DecorView(FrameLayout 包含Title布局) 该View便是我们会addView时的视图根布局 包含结构如下图:添加Window时代码如下: WindowManager windowManager ...

2019-04-17 16:27:01 1580

原创 View.post为何能够准确获取View的宽高

Activity作为android视图的承载者,拥有完整的生命周期,那我们到底在那个生命周期后能够通过View.getHeight或者View.getMeasureHeight获取准确的值呢?不至于总是获取到的值为0呢?为何我们通过View.post发送的runnable肯定会在界面绘制完成以及activity的window关联windowmanager后才会执行呢?带着这几个问题来追踪一下源码...

2019-03-28 11:39:37 871

原创 Activity启动到View的展示流程

####Activity启动到View的展示流程

2019-03-28 11:29:27 407

原创 Android如何通过降低App的Crash提升留存

app的crash大部分是由于代码不健壮或者脏数据造成的,·如何才能最大限度的避免这些crash,提升用户体验,增加留存,下面个人的一些对crash的思考与实践:作为一个android开发者基本了解当用户点击launcher上的app图标时,Zygote会fork一个进程,通过classloader加载运行ActivityThread的Main方法,然后bindApplication,由此开...

2019-03-27 20:22:04 335

原创 动态规划-解决公共字符串

动态规划个人理解:动态规划就是记住已经解决过的子问题的解,大问题可以由子问题构成,所有问题的最优解也是子问题的最优解构成,下面通过几个案例来了解一下:先来理解子序列和子串的区别-最长公共子序列分析:比较连个字符串的公共子串,可以以任意一个串作为基串,从该串的第一个字符开始与第二个串比较求出最优解,循环求出最后一个字符时对应的最优解: public static int ma...

2019-03-21 14:06:54 289

原创 算法—— 最近公共祖先 III

给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节点。返回 null 如果两个节点在这棵树上不存在最近公共祖先的话。样例样例1输入:{4, 3, 7, #, #, 5, 6}3 55 66 75 8输出:477null解释:4/ \3 ...

2019-02-22 20:51:07 195

原创 算法——山脉序列中的最大值

描述给 n 个整数的山脉数组,即先增后减的序列,找到山顶(最大值)您在真实的面试中是否遇到过这个题?样例例1:输入: nums = [1, 2, 4, 8, 6, 3]输出: 8例2:输入: nums = [10, 9, 8, 7],输出: 10实现:public class Solution { /** * @param nums: a mountai...

2019-02-22 20:46:43 610

原创 算法——翻转字符串II

描述给定输入的字符数组,逐词翻转数组。单词被定义为不包含空格的字符串.输入字符数组不包含前导或尾部空格,单词总是用单个空格分隔。样例给定 s = “the sky is blue”,翻转之后 : “blue is sky the”挑战你能在不分配额外空间的情况下原地解决这个问题吗?实现:public class Solution { /** * @param...

2019-02-22 20:44:25 195

原创 小米-基础算法-平衡二叉树

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。样例样例 1:输入: tree = {1,2,3}输出: true样例解释:如下,是一个平衡的二叉树。 1 / \ 2 3样例 2:输入: tree = {3,9,20,#,#,15,7}输...

2019-01-31 10:41:46 144

原创 小米-基础算法-删除链表中倒数第n个节点

给定两个二进制字符串,返回他们的和(用二进制表示)eg :a = “11”b = “1”返回 “100”实现:public class Solution { /** * @param a: a number * @param b: a number * @return: the result */ public String ...

2019-01-28 11:18:58 111

原创 小米-基础算法-二进制中有多少个1

计算在一个 32 位的整数的二进制表示中有多少个 1。eg:样例 1:输入:32输出:1解释:32(100000),返回 1。样例 2:输入:5输出:2解释:5(101),返回 2。实现:public class Solution { /* * @param num: An integer * @return: An integer ...

2019-01-28 11:15:31 187

原创 小米-基础算法-最近公共祖先

给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节 点。每个节点除了左右儿子指针以外,还包含一个父亲指针parent,指向自己的父亲。实现:/** * Definition of ParentTreeNode: * * class ParentTreeNo...

2019-01-28 11:12:49 258

原创 小米-基础算法-手写栈结构

实现一个栈,可以使用除了栈之外的数据结构eg:输入:push(1)pop()push(2)top() // return 2pop()isEmpty() // return truepush(3)isEmpty() // return false个人实现:public class Stack { private int initCapacity = 8; ...

2019-01-28 11:08:22 298

原创 Volley源码解析

Volley作为轻量级网络请求框架已经被广泛使用,这篇文章就从源码角度深层次了解Volley的构成,立足于熟练使用Volley的基础之上先来看一下请求流程图 从一个简单是Request 来探究这个Request生命过程。 RequestQueue queue = Volley.newRequestQueue(this); // 1 创建全局请求队列(类似队列的类) ...

2018-08-06 14:36:14 300

原创 Retrofit2.0源码解析

引用 Retrofit是Square生产的一款用于网络请求的框架,遵循RestApi风格,以其简单的网络配置与自定义设置,支持RxJava,自定义数据转换器等,Github上的start数已经有将近3w,而且目前一直在维护,内部网络请求采用okhttp来进行网络访问,这一系列的特性使其成为网络请求框架的新宠儿既然Retrofit如此火爆,那么自然是因为其良好的设计架构,完美的项目解耦...

2018-07-03 18:43:14 363

原创 Unable to start adb server: error: protocol fault (couldn't read status): Connection reset by peer

打开androidstudio,一直连接不上电脑,提示:Unable to start adb server: error: protocol fault (couldn’t read status): Connection reset by peer问题原因: 大多数情况是5037端口被占用。5037为adb默认端口。解决办法: 查看哪个程序占用了adb端口,结束这个程序,然...

2018-06-25 10:53:00 2576

原创 OkHttp3源码解析

引用 okhttp问世以来,以其高度封装、定制、简洁的api调用获得广大使用者的喜爱,目前最流行的网络请求框架莫过于rxjava+retrofit+okhttp,如果你一直停留在使用的地步,那你永远可能只是大自然的搬运工了,为了了解这些架构设计的巧妙以及为何会如此受欢迎,只用通过源码来了解设计精髓,学习square出品,必属精品的代码设计思路,本篇先来了解一下okhttp3,本片所有源码是...

2018-06-19 15:29:23 287

原创 Https如何保证了数据的安全?

Https与Http在数据传输过程的差别:Https与Http都是OSI模型中传输层协议,而唯一不同的就是Https中在Http的应用层和TCP/IP增加了一个SSL /TLS层,其实也是属于应用层,主要用来对数据进行加解密,保证数据的传输的正确性。 Http为何不安全http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通信双方也没有进行任何认证,通信过程非...

2018-06-05 12:40:20 8196 2

原创 Handler的前世今生之framework层源码分析

Handler在线程间通讯随处可见,尤其framework层,Activity的生命周期就是AMS(ActivityManagerService)通过ApplicationThread(ActivityThread的内部类,也是一个Binder)发送Handler消息通知执行ActivityThread的相应的Activity生命周期函数。那就先来分析一下App点击运行后Handler如何执行Ac...

2018-05-30 18:03:37 173

原创 Handler的前世今生之预热篇 —— ThreadLocal

Handler是android开发中必须学而且非常重要的知识点,handler主要来处理异步通讯,而这里就会涉及到多线程异步通讯,在了解Handler前先来说一下ThreadLocal先来创建一个ThreadLocal,根据代码来了解其存储原理:TheadLocal<String> local = new ThreadLocal();local.set("hello"...

2018-05-25 18:35:26 156

原创 类的加载原理

详解new Hello()内部机制 编写一个HelloParent类public class HelloParent { static { System.out.println("父类静态代码块"); } { System.out.println("父类构造代码块"); } public HelloParen

2018-01-19 11:09:00 263

原创 Android开发之Flux架构

Android开发之Flux架构 什么是Flux?Flux是一种软件开发架构,开发流程遵循Restful的点对点的数据流向,降低代码之间的耦合性,使得代码之间的调用更加清晰,Flux开始是应用于前端的技术架构,只要解决前端中资源与调用者的唯一性,下面是Flux架构的核心思想:Viewview是代表展示给用户的界面,比如Activity或者Fragment。Acti

2018-01-18 18:41:30 585

原创 数据库-事务

事务:事务是指数据库的一系列的逻辑操作,这组操作执行要么完全成功,要么全部失败。事务的管理:在默认的情况下,数据库会自动开启并管理事务,光里的方式是每一句sql语句表示一个事务,如果想要实现对个sql语句实现事务的管理,需要自己手动开启并且管理事务:start transaction; // 开启事务commit;// 提交事务rollback; //回滚事务在JDBC中管理事务代码:conn.

2017-09-29 13:20:49 203

原创 mysql数据库基本语法

数据库操作cmd命令进入数据库 MySQL-u root -p创建数据库 Create database [if not exists] database_name character set utf8|gbkcollate 表示校队规则 utf8_bin 区分字母的大小写 uft-8_general_ci 表示不区分字母的大小写查看数据库 SHOW DATABASES;查看数据库的创建语

2017-09-29 13:18:39 660

原创 Android中数值计算的精度

Android中数值计算的精度 在平常的开发中,会经常进行数值的计算,而如何才能更加准确的得到计算结果是最重要的,最近在做一个金融类的项目,其中涉及到黄金的计算,所以写这篇文章来总结一下,如何对数值的计算更加精确完美,这是本人在简书的第一篇文章,欢迎大家留言讨论。问题起源: 作为一名利用Java的开发人员,当遇到数值计算的时候首先想到的自然就是Double和Float,Double的精度值是1

2017-09-02 13:28:55 1817

原创 自定义波浪加载小球

功能来源于需求 ,给我一盒画笔,我将画出整个世界。本篇记录一次自定义类似加速球的自定义实现:效果图 具体实现 为了实现这样的一个效果,就必须自定义View,进行自定义布局初始 化以及定义变量等: private Paint mPaint; //基本画笔 private Paint textPaint; //文字画笔 private Path path; //路径

2017-08-01 10:52:05 1162

原创 将一个项目改成另一个项目时踩坑记录

更改项目遇到的坑!!!最近公司需要将一个以前的项目改头换面成一个新项目,虽然没难度,但是需要改动的地方确实挺对,于是挽起袖子开始干,很快一款新的app项目就产生了,在真机上测试赛也是很完美的。但是当我再装以前的项目的时候就直接装不上了,报的错误是在极光的自定义权限时包名重复,打开代码一看确实这样,为了将原先的项目更改成一个全新的项目,在AS上面只需要更改一下ApplicationId,该属性是APP

2017-07-16 11:42:39 525

原创 ApplicationId和包名啥关系

applicationId和包名的区别 今天由于由于项目需要改换成另一个app,所以就一顿调整,但是最后由于在项目的中使用的第三方的平台,比如:极光、友盟、百度定位等在添加应用时都需要包名,但是我在更改项目的时候只改掉了ApplicationId并未改掉包名,在第三方平台添加应用时到写那个,applicationId和包名到底什么关系? 首先我们要明白applicationId的含义是什么

2017-07-14 10:09:15 1590

原创 记一次面试编程题

今天去北京某公司面试一个Android的sdk开发工程师,到达公司后直接商家根据需求完成相应的编码工作,20分钟写不出来没有面试机会,结果不出意外的我没有完全写出来,被pass掉,内心虽然有些失落,但是一想,毕竟这个岗位薪资是是相对可观的,没有那么容易。也就释然了,在回来的路上才想到了如何写出来这个,欲哭无泪啊,于是想起一句话:机会随时都有,就看你准备好了没。下面是我回到房子后重新写的那个面试题,编

2017-07-04 11:15:50 332

原创 JAVA多线程下载

多线程下载文件平时开发中有时会用到文件下载,为了提高文件的下载速率,采用多线程下载能够达到事半功倍的效果:package test;/** * 文件下载类 * @author luweicheng * */import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOExcept

2017-06-29 13:52:06 232

原创 Android轮播图的实现

ViewPager实现轮播图对于轮播图的实现,我上次已经在博客中通过自定义ViewGroup实现了,不过过程比较复杂,设置到动画以及图片位置的计算,今天通过Android原生的ViewPager来实现开一个效果比较好的轮播图,先上个效果图: 在实现之前在ViewGroup中有个属性值:clipChilder=”true|false”这个值默认是true,就是当父布局设置为true时,子控件设置

2017-06-16 08:46:46 1231

原创 Android与JS数据互调

Android传输据给JS 在Android中将数据传给js,首先在AndroidStudio中创建一个项目,在认识目录下创建一个文件夹为:assets ,之后将写好的html界面放在这个目录下,为了界面好看点,我在该目录下放了一个图片,这里我为了方便就没有将该html放在Tomcat上。下面是我的html代码:<!DOCTYPE html><html><head> <titl

2017-05-22 20:42:55 373

空空如也

空空如也

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

TA关注的人

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