关于Handler的SyncBarrier解析

概念 SyncBarrier是同步分隔栏的意思,其实它是一个特殊的Message,它的targer为null。当消息队列遍历到这种消息类型的时候,它会跳过后面的同步Message(异步的Message会执行),这就是所谓的“同步分割栏”。 同步消息和异步消息 同步消息和异步消息的设置可以通过Handler的构造方法来指定: public Handler(Callback callback, boolean async) 也可以在Message中设置: public void setAsynchronous(boolean async) 同步消息和异步消息的区别就是SyncBarrier对它们的处理不同。 源码解析 private »

Android AIDL跨进程通讯解析例子

前言 本文通过一个模拟书店的小项目来向大家一步一步展示Android中通过AIDL实现跨进程通讯,虽然项目虽小,但是五脏俱全,通过本篇博客的学习,可以让大家迅速掌握AIDL的使用和了解Android跨进程通讯的一些基本知识,为接下来学习binder这块打下基础。 项目介绍 首先看一下项目的目录结构: 可以看到有三个Module: BookStock:图书存储,数据保存在本地数据库(该项目是没有界面的); BookStore:书店展示,提供图书的增删改查功能; model:存放实体类和aidl文件。 这里的BookStore模块和BookStock模块是通过跨进程通讯实现数据交互的,下面看下项目截图: 就是这么简单,两个界面,一个列表一个详情。 开始 一、 »

Android Hanlder消息机制源码浅析

开始 Android的消息机制主要是围绕Handler展开的,而对于Handler大家都再熟悉不过了,在开发过程中,有时候需要在子线程中进行耗时的操作,比如访问网络、I/O操作,当耗时操作完成之后需要在UI上做一些改变,由于Android开发的限制,我们不能在子线程中直接访问UI控件,这个时候就可以通过Hanlder将更新UI的操作切换的主线程中执行。 为什么Android系统不允许在子线程中更新UI呢?因为Android的UI控件不是线程安全的,如果在多线程中并发访问可能会导致一些不可预期的并发问题。那为什么不对UI控件的访问加上同步操作呢?主要是因为加锁会让UI访问的逻辑变得复杂,同时加锁也会降低访问的效率。 很多人认为Handler的作用是更新UI,的确没错,但是更新UI仅仅是Handler的一个特殊使用场景。 Android消息机制模型 Android的消息机制并不复杂,主要涉及一下这几个类: Handler: 负责消息的发送和处理; »

Android TaskAffinity实践详解

介绍 其实一直以来都知道在AndroidManifest的Activity中可以配置TaskAffinity这个属性,只知道这个东西和Activity的任务栈有关,今天花了点时间好好学习了一些这个东西。 launchMode(启动模式) Activity的任务栈是我们很熟悉的了,它是一种后进先出的结构。位于栈顶的Activity处于焦点状态,当按下back按钮的时候,栈内的Activity会一个一个的出栈,并且调用其onDestory()方法。如果栈内没有Activity,那么系统就会回收这个栈,每个APP默认只有一个栈,以APP的包名来命名. standard: 标准模式,每次启动Activity都会创建一个新的Activity实例,并且将其压入任务栈栈顶,而不管这个Activity是否已经存在。Activity的启动三回调(onCreate()->onStart( »

[转] HashMap实现原理及源码分析

转自 http://www.cnblogs.com/chengxiao/p/6059914.html 介绍 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。 目录 什么是哈希表 HashMap实现原理 »

[转] 图解 Android 事件分发机制

转自:http://www.jianshu.com/p/e99b5e8bd67b 为什么转载这篇文章?因为它能让你很容易的把事件分发记在你的脑海,感觉自己写不出比这更好的文章了,推荐! 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。 Android 事件分发流 关于Android 事件分发机制网上的博文很多,但是很多都是写个Demo然后贴一下输出的Log或者拿源码分析,然后一堆的注释和说明, »

Android仿微信支付密码弹出层

开始 最近项目中使用到了支付密码功能,感觉这类界面应该是比较常用的,涉及支付密码的输入的一般都会用到吧,所以单独地把这部分抽取出来,有需要的朋友可以拿去用用。 预览 使用 这个弹出层是一个DialogFragment,逻辑都封装在其内部,使用起来很简单: Bundle bundle = new Bundle(); bundle.putString(PayFragment.EXTRA_CONTENT, "提现:¥ " + 100.00); PayFragment fragment = new »

Dagger2实现更为规范化的MVP架构

开始 关于Dagger2的使用可以参考之前的一篇文章 我的Dagger2学习历程:从一头雾水到恍然大悟。最近在修改项目结构的是否发现之前的MVP结构并没有完全遵循MVP模式,也没有做到面向接口的编程,这里做出一点补充。 代码 MVP由Model、View、Presenter构成,则我们的契约类Contract则要为这三者定义好接口 LoginContract.java public interface LoginContract { interface View extends IView { /** * 登录成功 * * @param result */ void loginSuccess( »

我的Dagger2学习历程:从一头雾水到恍然大悟

前言 关于Dagger2的教程在网上已经有很多很多了,对于使用和原理都讲得比较明白,但是对于第一次接触的人们来说(比如我),难免会看得一头雾水,所以这里我就记录一下我学习Dagger2的过程,分享最快速的学习方法给大家。 介绍 Dagger2是一个依赖注入的框架,什么是依赖注入?简单的来说就是类中依赖的对象只要声明就可以使用了,它的创建由框架来管理。如下代码所示,application直接就可以拿来用了。 public class LoginActivity extends Activity{ @Inject Application application; } 开始 刚开始接触Dagger2的时候大量阅读了网上的教程,主要是一些概念性的东西, »

[转] Java并发编程:volatile关键字解析

转自 http://www.cnblogs.com/dolphin0520/p/3920373.html 开始   volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。 »