自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 ViewRootImpl、Surface、SurfaceFlinger简介

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

2017-12-08 17:12:06 1581

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

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

2017-12-07 20:43:32 1899

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

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

2017-12-06 16:43:35 2113

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

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

2017-12-03 16:50:29 1660

原创 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 643

原创 Volatile总结

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

2017-10-20 15:48:17 387

原创 JAVA内存模型

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

2017-10-16 16:18:35 628

原创 多线程 - ThreadPoolExecutor源码分析

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

2017-09-19 18:10:18 720

原创 多线程 - ThreadPoolExecutor详细介绍

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

2017-09-13 01:38:42 589 1

原创 单例模式

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

2017-09-08 17:21:10 386

原创 hashCode()函数详解

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

2017-09-07 17:56:54 5181

原创 == 与 equals() 详解

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

2017-09-06 18:30:30 560 2

原创 多线程 - Thread的interrupt机制详解

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

2017-08-23 19:43:20 1726

原创 多线程 - 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 2542

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

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

2017-08-18 18:12:33 9544

原创 Android休眠机制

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

2017-08-11 18:16:44 3055

原创 Java 内部类原理解析

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

2017-08-01 00:29:33 1103

原创 字符集编码详解

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

2017-07-27 23:50:52 572

原创 Java泛型原理详解

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

2017-07-27 21:04:48 1421

原创 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 911

原创 Handler解析(一):是如何实现线程之间的切换

在Android中,一般情况下(特殊情况先不说)只有UI线程才能对View进行操作,然而为了避免ANR等,耗时操作都放到子线程进行,操作完成之后再切换到UI线程,而Handler正好能够完成从子线程切换到UI线程的工作,那么Handler是如何从子线程切换到UI线程的呢? 消息传递机制要了解Handler,就首先需要了解Android的消息传递机制,整个消息传递机制有四部分组成: 1.Me

2017-07-16 02:27:07 8948 6

原创 OkHttp使用介绍

最近对应用的网络模块进行重构,从原有HttpClient切换到OkHttp;在此对OkHttp的使用做一个简单的总结,方便后续查阅。官网地址:http://square.github.io/okhttp/ GitHub地址:https://github.com/square/okhttp OkHttp框架是一个基于http协议(http协议介绍)的网络请求框架,实现的主要功能,网络请求的调度

2017-07-12 16:58:41 425

原创 Http协议介绍

最近在对应用的网络框架进行重构,那么就需要对http有一个深刻详细的了解,现在对http协议进行一个简单的总结。 Http的特点支持客户/服务器模式。简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。灵活:HTTP允许传输任意类

2017-07-11 21:07:42 612

原创 EventBus框架总结之支持泛型参数

EventBus框架总结之用法 EventBus框架总结之源码分析     前面两篇对EventBus的使用以及实现源码进行了总结,这一篇主要对EventBus源码的修改实现支持泛型参数的总结。 EventBus也会有烦恼    在EventBus框架总结之用法中介绍时提到,当系统登录之后通过EventBus发送一个LoginEvent;在用户注册成功的时候,发送一个RegisterEve

2017-06-25 01:55:44 2021 1

原创 EventBus框架总结之源码分析

EventBus框架总结之用法 总结了EventBus的基本用法。俗话说,“知其然,必知其所以然”,所以本文通过阅读EventBus的源码来了解它的实现原理。    EventBus是通过观察者模式来实现的消息总线,观察者模式必然包括订阅者、被订阅者、订阅事件、取消订阅事件、发布事件五个角色和动作,那么本文就从这五个角色和动作着手分析EventBus。Register :是如何进行事件订阅的呢?

2017-06-22 17:39:57 400

原创 MarkDown 笔记

记录平时使用MarkDown的相关笔记,加强记忆和便于查找* + -无序列表使用星号、加号或是减号作为列表标记,效果一样1. 2. 有序列表则使用数字接着一个英文句点--- *** +++分隔线:一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西。你也可以在星号或是减号中间插入空格插入代码段 代码段

2017-06-20 21:30:01 400

原创 EventBus框架总结之用法

因为当前项目中用到了EventBus,通过阅读源码了解EventBus的实现原理以及优缺点,并对其的一些缺点通过修改源码来进行改进。     EventBus是采用观察者设计模式来实现的事件订阅与发布的消息总线,在Android中用来代替Handler、Message、BroadCast等实现消息的传递和线程的切换等功能。 EventBus的优点 代码耦合度低,代码简洁 四种线程模

2017-06-20 21:20:52 627 1

原创 Android Studio 常用快捷键(MAC)

Android Studio 常用快捷键(MAC)掌握一些常用的快捷键,对于编码的效率还是有一定的作用,下面总结下我平时用到的快捷键,control + option + O : 移除unused imports,移除掉没有用到的引用option + command + L :格式化代码control + return : 调出generate,override方法等操作shift + comma

2017-06-20 00:25:23 807

原创 Android CPU架构解析

Android CPU架构解析一、CPU架构分类armeabiarmeabi-v7aarm64-v8ax86x86_64mipsmips64二、各种CPU架构的介绍ARM架构属于RISC指令集,指令集精简、指令等长,虽然这样的设计可以提高处理效率,但在遇到复杂的指令后,就需要更多的简单指令来堆砌复杂任务;ARM从来只是设计低功耗处理器。其宗旨是设计低功耗处理器,这是他们的强项。arm

2017-06-19 18:28:42 3629 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除