4 AdobeSolo

尚未进行身份认证

烂笔头,好记星

等级
TA的排名 13w+

ViewRootImpl、Surface、SurfaceFlinger简介

Activity 从加载布局文件到显示的过程分析 ViewManager、ViewRootImpl、WindowManagerImpl、WindowSession等详细解析在上面两篇文章中我们可以知道,Window的顶层View为DecorView,DecorView、LayoutParams以及对应的ViewRootImpl保存在一个全局单例WindowMangerGlobal中,ViewRo

2017-12-08 17:12:06

ViewManager、ViewRootImp、WindowManagerImpl、WindowSession等详细解析

在Activity 从加载布局文件到显示的过程分析文中最后介绍到,承载了布局文件的DecorView通过ViewManger添加进行显示,那添加之后的显示过程又是怎么样的呢?本篇文章主要分析它接下来显示的过程。 ViewManager WindowManger WindowMangerImplactivity的makeVisible()还是ActivityThread的handleResumeAc

2017-12-07 20:43:32

Activity 从加载布局文件到显示的过程分析

在Activity 生命周期函数执行过程详解中介绍了ActivityThread、Instrumentation、ActivityManagerService启动activity的过程,本文主要介绍Activity从加载布局文件到显示的过程。 SetContentView在activity的onCreate()生命周期函数中,会调用setContentView()来设置我们的布局文件,先来了解下s

2017-12-06 16:43:35

Activity 生命周期函数执行过程详解

平时开发中接触到Android的启动以及各种生命周期函数,但是其背后的执行过程是怎么样的呢?本文从源码的角度来分析activity的启动以及它的生命周期函数。 关键的类在分析源码之前,先了解下几个关键的类的作用:ActivityManagerService:activity的启动以及生命周期都统一由ActivityManagerService管理,而ActivityManagerService处于

2017-12-03 16:50:29

JNI - 使用Android Studio进行NDK开发

最近有个新需求,需要把一些东西通过c++来实现,因此也接触到了NDK开发,此文章用于记录通过Android Studio开发NDK的基本流程,已经碰到的一些坑。 搭建NDK环境要进行NDK开发,首先需要搭建DNK环境。 第一步,配置NDK SDK路径,打开项目配置设置SDK Location 第二步,定义3个宏命令,便于我们进行NDK开发时编译定义宏命令的步骤如下图,在Preference

2017-11-30 14:33:19

Volatile总结

在JAVA内存模型中介绍了内存模型的可见性、原子性以及时序性,要理解好volatile就必须很好地理解JAVA内存模型。本篇主要是对volatile进行一个总结,对JAVA内存模型不了解的可以看看JAVA内存模型这篇文章。 在JAVA内存模型中介绍了volatile可以保证可见性、一定程度上禁止重排序以及无法保证原子性;下面对其一一进行分析, volatile保证可见性先看一段普通变量的代码

2017-10-20 15:48:17

JAVA内存模型

随着计算机CPU从单处理一步步进化为四处理器、八处理器,为了最大地利用处理器,提高程序的性能以及吞吐量,日常编程中越来越多地涉及到多线程并发编程;在多线程编程带来高并发的同时,也伴随着带来了一些新的问题;本篇文章主要分析使用多线程时所需要了解的JAVA内存模型。 硬件层内存与处理器架构JVM的设计是基于硬件的基础上,要很好地理解JVM中的内存模型,首先需要理解硬件层的内存与处理器架构的设计。在内存

2017-10-16 16:18:35

多线程 - ThreadPoolExecutor源码分析

在多线程 - ThreadPoolExecutor详细介绍中对ThreadPoolExecutor进行了介绍,其中有介绍到线程池执行任务的整个过程,本篇文章主要是从源码的角度上探究线程池是如何执行任务的。 执行步骤先回顾一下多线程 - ThreadPoolExecutor详细介绍中提到的线程池执行任务的步骤:步骤1:如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务

2017-09-19 18:10:18

多线程 - ThreadPoolExecutor详细介绍

在之前的文章中总结了Java线程的两种创建方式:继承Thread和实现Runnable接口,在Java中使用多线程不一定非得用此两种方式,JDK为我们封装了大量的线程实用类,本文主要对Java中的线程池ThreadPoolExecutor做一下详细的介绍。 线程池的好处使用线程池比通过Thread或者Runnable直接实现多线程有哪些好处呢?1.减少系统资源消耗:线程池中线程能够被复用,不需要每

2017-09-13 01:38:42

单例模式

单例模式,是我们最常用的设计模式之一,主要作用是保证在应用程序中,一个类Class只有一个实例存在。本篇文章主要是对常用的单例模式实现方式做一个总结。 饿汉模式饿汉模式是我们比较常用的一种实现单例模式的方式之一public class Singleton { public static int VALUE = 1; private static final Singleton INST

2017-09-08 17:21:10

hashCode()函数详解

上一篇文章介绍了==与equals()的区别,在其中提到了重写equals()的同时需要重写hashCode()函数,本篇文章主要是对hashCode()做一个详细的介绍,包括其存在的意义以及如何去重写hashCode(). hashCode()存在的意义在Java的Object类中有一个方法hashCode()public native int hashCode();但是hashCode()函数

2017-09-07 17:56:54

== 与 equals() 详解

Java中有很多基础的知识,但是也是往往容易被人忽略的,本篇文章主要分析不得不提的==与equals()这对冤家(面试基本都会被问到吧)。 == 与 equals()在java中可以分为值类型与引用类型,8种基本数据类型(byte,short,int,long,float,double,boolean,char)就是属于值类型,其他的都是引用类型(包括我们常用的String) 值类型的比较只能通

2017-09-06 18:30:30

多线程 - Thread的interrupt机制详解

上面总结了Thread的使用和原理,那么当我们需要终止一个线程执行,该如何处理呢? stop()方法终止一个线程执行,我们首先想到的是Thread有没有提供终止的函数,不负所望我们找到了stop()方法(删除方法),示例代码如下 Log.i("thread","test thread start"); TestThread testThread = new TestThread(); test

2017-08-23 19:43:20

多线程 - Thread原理及使用

Java中创建线程有两种方式:继承Thread重写run()与实现Runnable()接口通过Thread构造。 继承Thread重写run()创建一个TestThread继承自Thread,然后调用start()运行线程TestThread testThread = new TestThread();testThread.start(); public class TestThread ext

2017-08-22 20:57:26

Android 获取前台应用的方法总结

应用开发中,经常遇到需要获取系统正在运行的前台应用是什么应用,例如桌面悬浮窗挂件,需要获取当前是不是处于桌面;然而随着Android版本的迭代,获取前台应用的方法都陆续被制裁,因此对这些方法做一个总结。 Android5.0以前版本 getRunningTasks()    在Android 5.0以前的版本中,google提供了getRunningTasks()方法来获取所有正在运行的应用

2017-08-18 18:12:33

Android休眠机制

最近修复一个遗留的bug,定时检测,超过多长时间则弹出一个Tip,在debug跟进这个bug的时候,并没有发现问题,Timer和TimerTask实现的定时任务,但是在实际使用的时候,产品等很多人都遇到不弹Tip的问题。回过神来一想,应该是掉进了Android休眠机制的坑里了。趁此机会对Android的休眠机制进行一个总结。 Linux的休眠机制       Android是基于Linux的,要

2017-08-11 18:16:44

Java 内部类原理解析

Java 内部类在代码中是非常常见的,但是在Android系统里,常常会因为内部类的使用导致内存泄漏的问题,所以本文对内部类从原理上做一个比较详细的解析以及如何在使用内部类时该如何避免内存泄漏 内部类的种类Java的内部类分为四种:静态内部类、成员内部类、局部内部类和匿名内部类; 静态内部类静态内部类,顾名思义是一个静态的类,代码如下public class MainActivity exte

2017-08-01 00:29:33

字符集编码详解

前言    在跨平台、跨操作系统或者跨区域之间,经常会涉及到编码的问题,因为前段时间在项目中,遇到了因为编码而产生乱码的问题,以前对编码也是一知半解,所以决定对编码有一个更为深入的了解,因此才有了这篇自己对编码总结的文章。 常见编码ASCII    American Standard Code for Information Interchange(美国信息交换标准代码)的缩写,表示所有的大写和小

2017-07-27 23:50:52

Java泛型原理详解

在Java 5时,引入了泛型,本文主要从原理的层面上分析泛型。 泛型的作用为什么需要引入泛型呢?泛型有什么样的作用呢?先看段代码public class Fruits { Fruits fruits; protected void set(Fruits item){ fruits = item; } protected Fruits get(){

2017-07-27 21:04:48

Handler解析(二):消息post与sendMessage机制

上一篇Handler解析(一):是如何实现线程之间的切换分析了Handler线程切换的原理,本篇主要介绍Handler的post机制。 Post与sendMessage方法首先看看Handler中包含的Post和sendMessage相关的方法boolean post(Runnable r)boolean postAtTime(Runnable r, long uptimeMillis)boo

2017-07-26 21:28:38

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!