android
文章平均质量分 89
阿呆不高
这个作者很懒,什么都没留下…
展开
-
从两种单例模式谈java类加载过程中静态变量的初始化问题
前言之前的文章里有总结过java的单例怎么写,具体链接java中的7种单例模式。经常听到,类的static变量在类加载时就会初始化,于是有了常说的两种单例模式的对比:饿汉式和静态内部类模式。通常的说法是,两种都是支持线程安全的(关于怎么个安全法请看我上面的链接),饿汉式不被推荐是因为会提前初始化,占用一部分内存。那我们就用代码说话。验证根据jvm加载class文件的过程,先是讲clas...原创 2019-10-20 00:02:59 · 1958 阅读 · 5 评论 -
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 · 364 阅读 · 0 评论 -
一个例子理解Rxjava的事件流转换原理
本文使用Rxjava1.0实例,重在研究思想和原理。以map操作符为例: Observable> observable = Observable.create(new Observable.OnSubscribe>() { @Override public void call(Subscribersuper原创 2018-01-18 17:31:01 · 992 阅读 · 0 评论 -
android activity的启动过程源码分析
之前被问起activity的一些源码,以前只是零零星星的看过一点,并没有多深入和系统的了解。作为android从业人员,没有认认真真的研究一下activity的源码,我都有些面红耳赤。不过,看源码永远都不嫌晚,那就看起来呗。 当然是从最熟悉的activity.startActivity入手,在Activity中,startActivity最后走了:public void startActiv...原创 2018-02-28 17:12:15 · 282 阅读 · 0 评论 -
Dagger2 是如何实现依赖注入的?
Dagger2流行已经有一段时间了,是一个很强大的依赖注入框架。以前接触过Spring的IOC,了解过它的实现原理是用反射实现的。而移动端是对资源很敏感的,Dagger2作为移动端的一个主流框架,肯定不会用一样的套路去玩。所以抽空研究了一下它的实现方式。从一个最简单的例子入手public class ActivityLogin extends Activity implements...原创 2018-04-20 16:03:34 · 746 阅读 · 0 评论 -
IOC的概念以及简单实现的思路
IOC的概念以及简单实现的思路what 控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)以上是百度百科的内容,当然看起来官方的不得了。我们今天当然不会去扣这样的字眼。 ...原创 2018-07-30 16:44:30 · 1484 阅读 · 0 评论 -
IOC的两种简单实现
IOC的两种简单实现上一次简单介绍过IOC的概念以及大体实现思路。IOC总结一句话就是框架帮开发者生成对象,以达到解耦的目的。牢牢记住这句话,如果把“如何帮开发者生成对象“作为题目,那么这次文章就是解这个题目的过程。 上次说到,IOC的两种实现思路:1、反射; 2、new 对象。 比如现在有两个类,Computer 和 Host类。 Computer.javapublic cl...原创 2018-07-30 19:16:28 · 8514 阅读 · 2 评论 -
初识Android 系统体系
初识Android 系统体系一、Android系统架构如图示: * 应用层部分包含系统应用(桌面应用等)和用户应用(QQ、达达等) * framework层是开发主要面向的一层,包括组件、服务等一系列框架(四大组件也在里面) * 使用SQLite 是因为它更轻量二、Android系统的启动流程图示是android手机启动后的流程boot loader 是物理...原创 2018-08-15 11:11:46 · 397 阅读 · 0 评论 -
MVP中Presenter复用思路和Inject-mvp
MVP模式早已经不是什么新鲜词了,这里不再赘述。最近在重构代码的过程中,发现了一件及其痛苦的事情:很多时候,model层在应用中是很薄的,大多数的业务逻辑都在Presenter层,但是由于模版 代码,Activity(View)->P是一一对应绑定的关系,那这样,相当于只是把原来在Activity中的逻辑转移到了Presenter中,虽然一定程度上解耦了,方便单测了,但是事实上Present...原创 2018-09-23 21:00:36 · 3241 阅读 · 0 评论 -
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 · 4464 阅读 · 5 评论 -
记一次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 · 24454 阅读 · 0 评论 -
两种责任链式调用的总结
一、有中断式public abstract class ChainHandler<T> { private ChainHandler nextHandler; public boolean process (T event) { return handleEvent(event) || nextHandler != n...原创 2018-12-08 18:41:30 · 292 阅读 · 0 评论 -
从线程池模型理解线程池的工作原理
首先要知道线程池是用来干嘛的,线程池是通过复用线程达到最大利用资源的。线程池的关键参数线程池的构造方法如下public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,...原创 2019-02-20 15:13:02 · 952 阅读 · 0 评论 -
java 内类和外类的关系
内类有哪些内类(inner class)是相对于外部类(outer class)来说的,包括:内部类/接口,内部匿名类/接口。内部类和外部类的关系内部类是可以访问外部类的成员变量的,包括私有变量(private)、静态变量(static):public class OuterClass { private int privateMem = 1; static String ...原创 2019-05-19 00:48:47 · 1314 阅读 · 2 评论 -
java中的7种单例模式
java中的7种单例模式单例模式是我们开发中经常会用到的,单例模式的好处是应用在运行时只有一个实例,生命周期从单例实例化后一直到应用生命周期结束。这里总结和比较一下几种单例的形式,共总结了七种。写法一public class Singleton1 implements Serializable { private static Singleton1 instance =原创 2018-01-12 13:43:28 · 1290 阅读 · 1 评论 -
handler ,Looper的机制,分析源码(二)消息的收发
之前从使用handler入手,顺了下handler线程切换的流程。 地址: http://blog.csdn.net/y1962475006/article/details/52243671 这篇需要详细分析各部分的关系和工作。一、handler、Looper、message、messagequeue的关系先看一个UML图: 可以看到它们之间都是依赖: Handler原创 2017-09-22 16:22:26 · 1000 阅读 · 0 评论 -
android6.0以及以上的权限处理
一、什么时候需要处理权限 权限声明在androidmanifest.xml文件中。在android6.0(api 23)以下,权限都是在安装的时候一次性授权的,没有办法动态地修改相应的权限。从android6.0开始,需要对危险(dangerous)权限做动态验证的处理,由用户授权后才能正常运作。 权限分为:normal,dangerous,signature,s原创 2017-02-15 22:29:09 · 327 阅读 · 0 评论 -
activity的启动模式和任务栈
稍微有点工作经验的android开发或许都知道activity的四种启动模式,但是是不是真的有深入的去了解它呢?activity应该在哪个栈启动?不同的栈有什么区别?里面会有什么坑?下面会说说我所了解到的。 一、 先说一下这四种模式: 1、 standard:标准模式。每次都在任务栈里创建新的实例,而不管这个栈里之前有没有。 singleTop:栈顶复用。如果要启动已经在栈顶的single原创 2016-09-01 22:08:53 · 541 阅读 · 0 评论 -
自己动手写一个简单图片轮播的控件
简单图片轮播的控件的实现本人菜鸟。 之前想找个轮播的控件,网上找了几篇文章,觉得搞的很复杂,思路也不是很清晰。所以干脆就自己写了。总的来说,是比较简单的。思路:图片轮播,其实就是滑动图片由手动改为自动而已。针对滑动图片,我立刻想到两个方案:horizontalScrollView 水平scrollView,本来就是滑动的,可以在它的childView中添加要显示的视图。viewPager原创 2016-07-10 12:39:11 · 412 阅读 · 0 评论 -
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 · 5335 阅读 · 1 评论 -
android touch事件分发机制的探究
android touch分发机制的探究首先有个认知: view、viewGroup、各种layout之间的关系: viewGroup是view的子类,layout是viewGroup的子类。 自定义viewGroup必须要重写onLayout();自定义view无法重写onInterceptTouchEvent自己做了个简单demo,用来研究touch的分发机制。先把代码贴出来:layout原创 2016-08-08 11:44:33 · 594 阅读 · 0 评论 -
android 屏幕坐标总结
android 屏幕坐标好多个,有时候傻傻分不清楚,经常记错,然后只能一个个试。尴尬~~ 把它们总结下来,以备不时之需嘿嘿。 一、视图坐标 最外面一层是屏幕,左上角是坐标原点,向右向下是x、y正方向。中间那层是父视图,里面是具体的某个子view。分为三组: getX:子view左边到父视图左边的距离; getY:子view上边到父视图上边的距离;getTop:子view上边到父视图上边原创 2017-03-14 00:16:45 · 11508 阅读 · 1 评论 -
activity之间的通讯方式总结
1、intent 这个最常用,使用startActivity或者startActivityForResult,本质上intent 是个parcelable对象。 2、共享文件 包括sharedpreference文件、数据库db文件以及其他文件。但是这种方法,是非线程安全的。 3、使用回调 这种方法会持有接受回调方的引用,增加了耦合。当然,没人会建议你这么做。 4、使用广播 当然这种方原创 2017-03-24 13:54:25 · 719 阅读 · 0 评论 -
ListView的使用的一丢丢经验
在使用listview的过程中,会碰到滑动卡顿的问题。这个问题尤其在item view的布局比较复杂的时候存在。带来的使用体验会很差,在一些较低端的设备上,甚至有可能发生anr。大致说一下我自己的一点经验,高手还请帮忙补充,多多益善~~使用viewHolder 这个其实已经算是一个很基础、近乎标准的东东了,但是毋庸置疑它很重要。避免过度绘制 android 每隔16ms,也就是60fps原创 2016-08-09 18:18:58 · 261 阅读 · 0 评论 -
android 应用内悬浮框,并在指定页面显示
一、实现悬浮悬浮框基本的实现方式有两种: 1、 在一个页面内,可以用FrameLayout 或者RelativeLayout。FrameLayout 中view是在左上角堆叠的,也就是说是z-order的,所以可以页面的基布局是FrameLayout,然后在上面放一个view,并且更新view的translationX ,translationY来改变位置。 RelativeLayout 可以原创 2017-06-06 22:49:40 · 10023 阅读 · 2 评论 -
handler ,Looper的机制,分析源码(一)线程切换。
handler ,Looper的机制,详细的分析源码原创 2016-08-18 18:26:33 · 598 阅读 · 0 评论 -
#handler ,Looper的机制,分析源码(三)自己撸一套Looper机制
前言之前写了文章分析了handler切换线程和Looper机制的源码, 然后就想,这套东西是不是自己可以实现一套?好奇心重的我呀~~撸起袖子就是干!分析首先,这套东西是完全自己实现,要和android之前的那套完全脱离,所以不能引入android sdk,只能建一个java library。其次,自己撸的这东东,也要能切换线程,也要有消息的循环机制(入队列、出队列、线程阻塞和唤醒)。啧啧,好像功能原创 2017-10-31 01:32:03 · 530 阅读 · 2 评论 -
从android HashMap的源码实现谈谈HashMap的性能问题
从android HashMap的源码实现谈谈HashMap的性能问题前言实际开发中,HashMap可能是我们用的最多的数据结构了。基础稍微扎实一点的开发,问起HashMap的特性,都会说,HashMap是key可以为null的,无序的,非线程安全的。没错,这几点确实是HashMap的特性,但是HashMap究竟为什么是非线程安全的,多线程下会有什么问题,作为“有理想”的程序员,都不应该放过。预备知原创 2017-12-19 16:32:53 · 3678 阅读 · 0 评论 -
android 代码规范总结
一、 命名规范 1、 类命名 大驼峰命名。 2、 变量命名 1)成员变量(全局)小写m开头,后面加小驼峰命名; 2)局部变量,直接小驼峰。 3)常量,用static final修饰,全大写,单词之间以“_”分隔 3、 方法命名 小驼峰命名。 4、 接口(interface)命名 以大写 I 开头,如果有多个单词,每个单词首字母大写。 如:IBook 5、 组件、原创 2017-03-16 20:46:13 · 595 阅读 · 0 评论 -
view事件分发源码学习和分析
activity是承载视图和事件的,所以我们从activity入手。和事件相关的三个方法:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。 我们先看activity的dispatchTouchEvent:/** * Called to process touch screen events. You can override原创 2016-11-28 21:50:27 · 381 阅读 · 0 评论