街题系列 - Java 两个线程交替打印

两个线程交替打印,不管是一个线程打印奇数,一个线程打印偶数,或者一个线程打印数字,一个线程打印字母,这种题目应该面试的时候没少遇到吧。看网上有好几种实现方式。今天我就列举一下。以一个线程打印数字,一个线程打印字母为例吧 第一种 Synchronized + await()+ notify() 这样应该是我们常想到的吧 public class PrintNumAndChar5 { public static void main(String[] args...

阅读更多

扫盲系列 - RxJava 2.0 -- Flatmap 原理

FlatMap 简单来说就是把 被观察者的每次发射出来的事件,转换成一个子被观察者,然后通过合并(Merge)所有子被观察者的事件成总的一系列事件发送给观察者。 相信很多人理解 flatmap 都是 根据 扔物线大神文章中的学生和课程的例子,我也是以这个例子分析源码的。 List<Student> students = new ArrayList<Student>(); Observable.fromIterable(students) ...

阅读更多

扫盲系列 - RxJava 2.0 -- 线程切换原理

没有严格按照RxJava 2.0 源码去分析,而是根据 https://github.com/yds17322/YRxJava 这个去分析的,其实原理都是一样的,只不过这个更简单,更容易理解。 Observable .create(new ObservableOnSubscribe<String>() { @Override public void subscribe(Observabl...

阅读更多

源码分析 - Andrid 输入法框架 之 InputConnection 对象创建

我们在前面知道。在View的onTouchEvent()中,执行了requestFocus()使得TextView获得了焦点。 而requestFocus() -> requestFocusNoSearch()-> handleFocusGainInternal()->onFocusChanged(),所以我们就直接看 onFocusChanged() View # onFocusChanged() protected void onFocus...

阅读更多

源码分析 - Andrid 输入法框架 之 键盘启动的流程

点击 EditText , EditText 获得焦点,然后键盘显示,这是最常见的操作,可是里面的内部实现是怎么样的呢?带着这个疑问,我们来看看系统源码。 我们知道, EditText 是获得了点击事件,才能显示键盘,如果 EditText 连点击事件都没收到,肯定不会显示键盘,所以, EditText 肯定会执行到 onTouchEvent() 方法。 由于 EditText 继承 Textview ,并且本身没有覆盖 onTouchEvent() ,所以我们...

阅读更多

源码分析 - Andrid 输入法框架 之 启动服务

名词简介 IMMS 全称是 InputMethodManagerService,是一个系统服务。整个系统当中,一切与输入法有关的地方的总控制中心,负责管理系统的所有输入法,包括输入法Service(即IMS)加载以及切换,它通过管理下面三个模块来实现系统的输入法框架 WindowManagerService 负责显示输入法,接收用户事件 IMS 输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过 commitTetxt 提交出来 Input...

阅读更多

Android 性能优化 -- 内存优化

java 对象的生命周期 主要分7个阶段 Created : 创建阶段 主要分以下几个步骤 为对象分配存储空间 构造对象 从父类到子类对static成员进行初始化,类的static成员初始化在ClassLoader加载该类的时候进行 父类成员变量按照顺序初始化,递归调用超类的构造方法 子类成员变量按照顺序初始化,一旦对象被创建,子类的构造方法就调用该对象并未某些变量赋值 ...

阅读更多

View 的一些知识点

View 是一个界面层控件的一种抽象,它代表一个控件。由于 ViewGroup 也是继承 View ,这也就意味这 View 本身可以是单个控件也可以是多个控件组成的一组控件。 决定 View 的位置参数 一种方式,相对于父容器的来说 top getTop() left getLeft() right getRight() bottom getBottom() 关系如下: ...

阅读更多