09-17 碎碎念

09/17 晨停电到现在有9小时了,仿佛没有电没有网啥也干不了,背着电脑找了家小店,点了杯咖啡,码码字,回顾整理一下这个比较郁闷的 Q

最近这三个月感觉技术上的沉淀和成长没有以往的多

Read more   2016/9/17 posted in  balabala

Window 和 WindowManager

概述

window

  • window 是一个抽象类,具体实现是PhoneWindow
  • window 也是一个抽象的概念,每个 window 内对应这一个 DecorView 和一个 ViewRootImplwindowDecorView 通过ViewRootImpl联系。 # WindowManager WindowManager 是 外界访问 Window 的入口
Read more   2016/9/16 posted in  Android

window、Activity、DecorView、ViewRoot关系

简介

  • Activity并不负责视图控制,它只是控制生命周期和处理事件,真正控制视图的是Window。一个Activity包含了一个Window,Window才是真正代表一个窗口,Window 中持有一个 DecorView,而这个DecorView才是 view 的根布局

  • DecorView是FrameLayout的子类,它可以被认为是Android视图树的根节点视图。DecorView作为顶级View,一般情况下它内部包含一个竖直方向的LinearLayout,在这个LinearLayout里面有上下两个部分(具体情况和Android版本及主体有关),上面的是标题栏,下面的是内容栏。在Activity中通过setContentView所设置的布局文件其实就是被加到内容栏之中的,而内容栏的id是content,在代码中可以通过ViewGroup content = (ViewGroup)findViewById(R.android.id.content)来得到content对应的layout。

Read more   2016/9/15 posted in  Android

AsyncTask 源码分析

简介

AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.
主要是为了在后台线程中做操作时更新 UI 的

Read more   2016/9/3 posted in  Android

Runnable、Callable、Future、FutureTask的区别

Runnable(interface)

/**
 * Represents a command that can be executed. Often used to run code in a
 * different {@link Thread}.
 */
public interface Runnable {

    /**
     * Starts executing the active part of the class' code. This method is
     * called when a thread is started that has been created with a class which
     * implements {@code Runnable}.
     */
    public void run();
}

run()方法返回值为void类型,所以在执行完任务之后无法返回任何结果。

Read more   2016/8/21 posted in  Android

Looper、Handler、Message 源码分析

Looper

文档这么介绍这个类的

  • Class used to run a message loop for a thread. Threads by default do
    • not have a message loop associated with them; to create one, call
    • {@link #prepare} in the thread that is to run the loop, and then
    • {@link #loop} to have it process messages until the loop is stopped.

通常在线程中是这样使用

Read more   2016/8/20 posted in  Android

HandlerThread 源码 分析

HandlerThread

首先文档对这个类的介绍

Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.

如果我有一个耗时的任务需要放在非 UI 线程处理,一般情况下是 new 出一个 thread 来执行,然而,这样就存在一个性能问题:多次创建和销毁线程是很耗系统资源的。

Read more   2016/8/20 posted in  Android

wait/notify/notifyAll 总结

概述

在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notifyAll()方法,将通知其他线程从wait()方法处返回。

Object是所有类的超类,它有5个方法组成了等待/通知机制的核心:notify()、notifyAll()、wait()、wait(long)和wait(long,int)。在Java中,所有的类都从Object继承而来,因此,所有的类都拥有这些共有方法可供使用。而且,由于他们都被声明为final,因此在子类中不能覆写任何一个方法。

Read more   2016/8/14 posted in  Java

synchronized 总结

synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:

  1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象
  2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象
  3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象
  4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用的对象是这个类的所有对象
Read more   2016/8/14 posted in  Java

Activity 总结

Read more   2016/8/4 posted in  Android