自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

y1962475006的博客

世界那么大,我想写代码

  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

原创 从两种单例模式谈java类加载过程中静态变量的初始化问题

前言之前的文章里有总结过java的单例怎么写,具体链接java中的7种单例模式。经常听到,类的static变量在类加载时就会初始化,于是有了常说的两种单例模式的对比:饿汉式和静态内部类模式。通常的说法是,两种都是支持线程安全的(关于怎么个安全法请看我上面的链接),饿汉式不被推荐是因为会提前初始化,占用一部分内存。那我们就用代码说话。验证根据jvm加载class文件的过程,先是讲clas...

2019-10-20 00:02:59 1942 5

原创 java 内类和外类的关系

内类有哪些内类(inner class)是相对于外部类(outer class)来说的,包括:内部类/接口,内部匿名类/接口。内部类和外部类的关系内部类是可以访问外部类的成员变量的,包括私有变量(private)、静态变量(static):public class OuterClass { private int privateMem = 1; static String ...

2019-05-19 00:48:47 1302 2

原创 从线程池模型理解线程池的工作原理

首先要知道线程池是用来干嘛的,线程池是通过复用线程达到最大利用资源的。线程池的关键参数线程池的构造方法如下public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,...

2019-02-20 15:13:02 944

原创 两种责任链式调用的总结

一、有中断式public abstract class ChainHandler<T> { private ChainHandler nextHandler; public boolean process (T event) { return handleEvent(event) || nextHandler != n...

2018-12-08 18:41:30 285

原创 记一次webview 中使用shouldInterceptRequest的踩坑

shouldInterceptRequest 是WebViewClient的一个方法,官方的说明:/** * Notify the host application of a resource request and allow the * application to return the data. If the return value is null, the We...

2018-12-08 17:50:54 24042

原创 ARouter使用和案例

ARouter的使用官网github:https://github.com/alibaba/ARouter/blob/master/README_CN.md这里对其做了分类整理,便于更方便理解。跳转跳转Activity1、path跳转path的规则:/group/child…至少两个“/”;和Activity的@Route注解值匹配// 构建标准的路由请求ARouter.getI...

2018-10-12 14:14:26 4430 5

原创 MVP中Presenter复用思路和Inject-mvp

MVP模式早已经不是什么新鲜词了,这里不再赘述。最近在重构代码的过程中,发现了一件及其痛苦的事情:很多时候,model层在应用中是很薄的,大多数的业务逻辑都在Presenter层,但是由于模版 代码,Activity(View)->P是一一对应绑定的关系,那这样,相当于只是把原来在Activity中的逻辑转移到了Presenter中,虽然一定程度上解耦了,方便单测了,但是事实上Present...

2018-09-23 21:00:36 3224

原创 初识Android 系统体系

初识Android 系统体系一、Android系统架构如图示: * 应用层部分包含系统应用(桌面应用等)和用户应用(QQ、达达等) * framework层是开发主要面向的一层,包括组件、服务等一系列框架(四大组件也在里面) * 使用SQLite 是因为它更轻量二、Android系统的启动流程图示是android手机启动后的流程boot loader 是物理...

2018-08-15 11:11:46 387

原创 IOC的两种简单实现

IOC的两种简单实现上一次简单介绍过IOC的概念以及大体实现思路。IOC总结一句话就是框架帮开发者生成对象,以达到解耦的目的。牢牢记住这句话,如果把“如何帮开发者生成对象“作为题目,那么这次文章就是解这个题目的过程。 上次说到,IOC的两种实现思路:1、反射; 2、new 对象。 比如现在有两个类,Computer 和 Host类。 Computer.javapublic cl...

2018-07-30 19:16:28 8498 2

原创 IOC的概念以及简单实现的思路

IOC的概念以及简单实现的思路what 控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)以上是百度百科的内容,当然看起来官方的不得了。我们今天当然不会去扣这样的字眼。 ...

2018-07-30 16:44:30 1476

原创 Dagger2 是如何实现依赖注入的?

Dagger2流行已经有一段时间了,是一个很强大的依赖注入框架。以前接触过Spring的IOC,了解过它的实现原理是用反射实现的。而移动端是对资源很敏感的,Dagger2作为移动端的一个主流框架,肯定不会用一样的套路去玩。所以抽空研究了一下它的实现方式。从一个最简单的例子入手public class ActivityLogin extends Activity implements...

2018-04-20 16:03:34 734

原创 android activity的启动过程源码分析

之前被问起activity的一些源码,以前只是零零星星的看过一点,并没有多深入和系统的了解。作为android从业人员,没有认认真真的研究一下activity的源码,我都有些面红耳赤。不过,看源码永远都不嫌晚,那就看起来呗。 当然是从最熟悉的activity.startActivity入手,在Activity中,startActivity最后走了:public void startActiv...

2018-02-28 17:12:15 269

原创 okhttp源码分析之同步、异步请求

核心类:public interface Interceptor { Response intercept(Chain chain) throws IOException; interface Chain { Request request(); Response proceed(Request request) throws IOException; /

2018-01-23 23:52:30 348

原创 一个例子理解Rxjava的事件流转换原理

本文使用Rxjava1.0实例,重在研究思想和原理。以map操作符为例: Observable> observable = Observable.create(new Observable.OnSubscribe>() { @Override public void call(Subscribersuper

2018-01-18 17:31:01 982

原创 java中的7种单例模式

java中的7种单例模式单例模式是我们开发中经常会用到的,单例模式的好处是应用在运行时只有一个实例,生命周期从单例实例化后一直到应用生命周期结束。这里总结和比较一下几种单例的形式,共总结了七种。写法一public class Singleton1 implements Serializable { private static Singleton1 instance =

2018-01-12 13:43:28 1213 1

原创 从android HashMap的源码实现谈谈HashMap的性能问题

从android HashMap的源码实现谈谈HashMap的性能问题前言实际开发中,HashMap可能是我们用的最多的数据结构了。基础稍微扎实一点的开发,问起HashMap的特性,都会说,HashMap是key可以为null的,无序的,非线程安全的。没错,这几点确实是HashMap的特性,但是HashMap究竟为什么是非线程安全的,多线程下会有什么问题,作为“有理想”的程序员,都不应该放过。预备知

2017-12-19 16:32:53 3664

原创 #handler ,Looper的机制,分析源码(三)自己撸一套Looper机制

前言之前写了文章分析了handler切换线程和Looper机制的源码, 然后就想,这套东西是不是自己可以实现一套?好奇心重的我呀~~撸起袖子就是干!分析首先,这套东西是完全自己实现,要和android之前的那套完全脱离,所以不能引入android sdk,只能建一个java library。其次,自己撸的这东东,也要能切换线程,也要有消息的循环机制(入队列、出队列、线程阻塞和唤醒)。啧啧,好像功能

2017-10-31 01:32:03 516 2

原创 handler ,Looper的机制,分析源码(二)消息的收发

之前从使用handler入手,顺了下handler线程切换的流程。 地址: http://blog.csdn.net/y1962475006/article/details/52243671 这篇需要详细分析各部分的关系和工作。一、handler、Looper、message、messagequeue的关系先看一个UML图: 可以看到它们之间都是依赖: Handler

2017-09-22 16:22:26 962

原创 android 应用内悬浮框,并在指定页面显示

一、实现悬浮悬浮框基本的实现方式有两种: 1、 在一个页面内,可以用FrameLayout 或者RelativeLayout。FrameLayout 中view是在左上角堆叠的,也就是说是z-order的,所以可以页面的基布局是FrameLayout,然后在上面放一个view,并且更新view的translationX ,translationY来改变位置。 RelativeLayout 可以

2017-06-06 22:49:40 9982 2

原创 activity之间的通讯方式总结

1、intent 这个最常用,使用startActivity或者startActivityForResult,本质上intent 是个parcelable对象。 2、共享文件 包括sharedpreference文件、数据库db文件以及其他文件。但是这种方法,是非线程安全的。 3、使用回调 这种方法会持有接受回调方的引用,增加了耦合。当然,没人会建议你这么做。 4、使用广播 当然这种方

2017-03-24 13:54:25 712

原创 android 代码规范总结

一、 命名规范 1、 类命名 大驼峰命名。 2、 变量命名 1)成员变量(全局)小写m开头,后面加小驼峰命名; 2)局部变量,直接小驼峰。 3)常量,用static final修饰,全大写,单词之间以“_”分隔 3、 方法命名 小驼峰命名。 4、 接口(interface)命名 以大写 I 开头,如果有多个单词,每个单词首字母大写。 如:IBook 5、 组件、

2017-03-16 20:46:13 586

原创 android 屏幕坐标总结

android 屏幕坐标好多个,有时候傻傻分不清楚,经常记错,然后只能一个个试。尴尬~~ 把它们总结下来,以备不时之需嘿嘿。 一、视图坐标 最外面一层是屏幕,左上角是坐标原点,向右向下是x、y正方向。中间那层是父视图,里面是具体的某个子view。分为三组: getX:子view左边到父视图左边的距离; getY:子view上边到父视图上边的距离;getTop:子view上边到父视图上边

2017-03-14 00:16:45 11369 1

原创 android6.0以及以上的权限处理

一、什么时候需要处理权限 权限声明在androidmanifest.xml文件中。在android6.0(api 23)以下,权限都是在安装的时候一次性授权的,没有办法动态地修改相应的权限。从android6.0开始,需要对危险(dangerous)权限做动态验证的处理,由用户授权后才能正常运作。 权限分为:normal,dangerous,signature,s

2017-02-15 22:29:09 315

原创 popupwindow获取宽高

我们在确定popupwindow的时候会用到 showAtLocation(View parent, int gravity, int x, int y) api,这个api的入參: @param parent a parent view to get the {@link android.view.View#getWindowToken()} token from * @param gra

2017-01-31 20:43:23 5287 1

原创 view事件分发源码学习和分析

activity是承载视图和事件的,所以我们从activity入手。和事件相关的三个方法:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。 我们先看activity的dispatchTouchEvent:/** * Called to process touch screen events. You can override

2016-11-28 21:50:27 368

原创 activity的启动模式和任务栈

稍微有点工作经验的android开发或许都知道activity的四种启动模式,但是是不是真的有深入的去了解它呢?activity应该在哪个栈启动?不同的栈有什么区别?里面会有什么坑?下面会说说我所了解到的。 一、 先说一下这四种模式: 1、 standard:标准模式。每次都在任务栈里创建新的实例,而不管这个栈里之前有没有。 singleTop:栈顶复用。如果要启动已经在栈顶的single

2016-09-01 22:08:53 533

原创 使用gradle打包包含assets目录的jar包

步骤: 1、apply plugin: 'com.android.library'这一步是声明为library组件;library组件不需要applicationId,把这个删掉。 2、 在android{}里面增加:lintOptions{ abortOnError false }这个是为了屏蔽掉lint的错误 3、minifyEnabled false4、def

2016-08-30 17:23:05 1607

原创 handler ,Looper的机制,分析源码(一)线程切换。

handler ,Looper的机制,详细的分析源码

2016-08-18 18:26:33 586

原创 ListView的使用的一丢丢经验

在使用listview的过程中,会碰到滑动卡顿的问题。这个问题尤其在item view的布局比较复杂的时候存在。带来的使用体验会很差,在一些较低端的设备上,甚至有可能发生anr。大致说一下我自己的一点经验,高手还请帮忙补充,多多益善~~使用viewHolder 这个其实已经算是一个很基础、近乎标准的东东了,但是毋庸置疑它很重要。避免过度绘制 android 每隔16ms,也就是60fps

2016-08-09 18:18:58 251

原创 android touch事件分发机制的探究

android touch分发机制的探究首先有个认知: view、viewGroup、各种layout之间的关系: viewGroup是view的子类,layout是viewGroup的子类。 自定义viewGroup必须要重写onLayout();自定义view无法重写onInterceptTouchEvent自己做了个简单demo,用来研究touch的分发机制。先把代码贴出来:layout

2016-08-08 11:44:33 580

原创 自己动手写一个简单图片轮播的控件

简单图片轮播的控件的实现本人菜鸟。 之前想找个轮播的控件,网上找了几篇文章,觉得搞的很复杂,思路也不是很清晰。所以干脆就自己写了。总的来说,是比较简单的。思路:图片轮播,其实就是滑动图片由手动改为自动而已。针对滑动图片,我立刻想到两个方案:horizontalScrollView 水平scrollView,本来就是滑动的,可以在它的childView中添加要显示的视图。viewPager

2016-07-10 12:39:11 399

安卓简单轮播控件

简单的安卓轮播控件,使用方便、简单。

2016-07-10

maven3.1.0

aven还能帮助我们管理原本分散在项目中各个角落的项目信息,包括项目描 述、开发者列表、版本控制系统地址、许可证、缺陷管理系统地址等。这些微小的变化看起来很琐碎,并不起眼,但却在不知不觉中为我们节省了大量寻找信息的时 间。除了直接的项目信息,通过Maven自动生成的站点,以及一些已有的插件,我们还能够轻松获得项目文档、测试报告、静态分析报告、源码版本日志报告等 非常具有价值的项目信息。

2015-11-02

C++程序设计 谭浩强PDF版

完整版的谭浩强C++ 对于初学者来说极为有用

2012-04-23

空空如也

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

TA关注的人

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