自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沈浦晟的博客

Android研发

  • 博客(28)
  • 收藏
  • 关注

原创 Android 源码梳理

Android 源码梳理前言作为霜枫司机一年学习的总结,附上帅照一张。 目录1. Android系统启动过程分析 2. Android进程间通信源码梳理 3. Android匿名共享内存系统源码梳理Android系统启动过程分析  Android系统是基于Linux内核,当我们按下电源键以后Android设备执行了一些操作。   对于Androi

2016-12-31 19:18:35 1691 2

原创 Gradle For Android

第一章理解Gradle的基础       在Android Studio中 Android 工程是由gradle构建,你需要一段Gradle脚本,我们称之为build.gradle,一般来说在build.gradle中有一些基本的设置和属性来帮助你构建。相对于Ant或者Maven这会简单许多。       Gradle构建的脚本并不是用传统的XML文本语言来构建,它采用的是一种doma

2016-07-17 10:26:47 493

原创 Android MVP模式

曾经在一个项目中有一个Activity是负责机票的创单,也就是生成订单的工作,这里的逻辑非常复杂。创单的参数就达到200多个,在创单之前还有许多数据校验以及重复订单的校验操作,如果全部在Activity中实现将会导致代码极其臃肿。 这里我们提供一种解决的思路,就是MVP模式,首先笼统的介绍一下MVP: 我们将Activity复杂的逻辑处理移至另外的一个类(Presenter)中时,Activit

2016-06-27 23:08:41 389

原创 ListView 源码研究 带你从源码中赞叹谷歌大吊们的代码艺术

ListView有一个非常神奇的功能,即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更多,ListView都不会发生OOM或者崩溃,而且随着我们手指滑动来浏览更多数据时,程序所占用的内存竟然都不会跟着增长。 在ListView的父类AbsListView中有一个非常重要的机制叫做RecycleBin: 它的实现是一个RecycleBin 类 我们看下里面的一些主要的方法c

2015-12-28 18:27:26 712

原创 网络通信常用加密算法研究

什么是对称加密和非对称加密什么是对称加密: 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高。IDEA加密标准由PGP

2015-12-24 10:46:10 6404

原创 Android5.0 AsyncTask的实现分析

首先看一下AsyncTask在Android中的一个简单应用:package com.example.zhy_asynctask_demo01; import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle;

2015-12-09 11:54:30 492

原创 Android 5.0 源码分析 Handler Looper MessageQueue 底层原理

理解Looper类 每个线程都只能有一个Looper类的实例对象,looper类通过实例方法prepare() 创建: private static void prepare(boolean quitAllowed) { if (sThreadLocal.get() != null) { throw new RuntimeExcepti

2015-12-08 16:47:31 891

原创 Android 启动过程的简述

1. Bootloader 引导 当我们按下手机的电源键时,首先会运行bootloader,bootloader的主要作用是初始化基本的硬件设备(例如 CPU 内存 Flash等),并且建立空间映射。目的是为装载Linux内核做好准备,在Linux内核装载完毕后,bootloader会被移除。 在bootloader的运行期间,用户可以通过规定好的组合键,可以进入系统的两个模块 - Fas

2015-11-24 15:19:03 537

原创 Android Synchronized的易错点

在Java中关键字Synchronized用于提供同步操作,主要的作用是在多线程的情况下,保持数据的一致。 一般有以下三种用法:保护一段代码class Foo implements Runnable { public void lockedMethod() { private String mLock; //....... synchronized(mLock) {

2015-11-20 15:43:00 411

原创 Android JNI 详解

JNI的作用全称是 Java Native Interface (Java本地接口),JNI来自于Java,Android作为一种嵌入式的操作系统,有大量的驱动、硬件相关的功能必须在native层实现,其次C/C++代码的效率也是优于Java的代码,所以一些耗时的计算操作,例如一些加密算法还是应该用JNI开发。 在JNI中 无论是Java到C/C++还是C/C++到Java,中间都没有跨线程的调用

2015-11-20 10:48:34 427

原创 Android 5.0源码解析 ---Activity源码分析

Context上下文环境的创建我们进入到context这个类中发现这个类是一个抽象类:public abstract class Context {}在这个类中基本是抽象方法,Activity是继承于ContextThemeWrapper,ContextThemeWrapper则是继承于ContextWrapper又继承于Context。 在上一篇介绍startActivity的过程中最后一步是

2015-11-04 17:33:07 1711

原创 Android开发---测试教程

Android中的测试框架Android测试框架基于JUnit,JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。尽管你可以使用JUnit测试Android工程,但Android工具允许你为应用程序的各个方面进行更为复杂的测试,包括单元层面及框架层面。 Android JUint 扩展提供了对Android特定组件(如Activity,Service)的测试支持,这些扩展

2015-10-30 15:27:09 529

原创 Android 5.0源码分析---startService与bindService的区别

startService启动过程简述主进程调用到ActivityManagerService进程中,完成新进程的创建; 这一步主要是解析Intent中的参数,解析前面在AndroidManifest.xml定义的Service标签的intent-filter相关内容。紧接着启动一个新的进程。在新的进程启动完成后,从新进程调用到ActivityManagerService进程中,获取要在新进程启

2015-10-29 14:07:05 658

原创 Android 5.0源码分析---ContentProvider中的ContentObserver研究

就像在Android中的广播机制一样,在ContentProvider中的消息通知机制也有一个管理者 叫做ContentService 现在我们进入到ContentResolver 中去看下是如何注册这个ContentObserver的: public final void registerContentObserver(Uri uri, boolean notifyForDescenden

2015-10-29 09:08:30 874

原创 Android 5.0源码分析---Content Provider的启动过程分析

ContentProvider是Android四大组件之一,承担着跨进程数据访问的重要职责,既然是跨进程,那就必须有一个客户端进程和一个ContentProvider进程,那么这里就又涉及到了进程间的通信。 Android提供了ContentProvider,一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数

2015-10-28 16:08:19 711

原创 Android 5.0源码分析---startService的过程

我们之前讲到了ActivityManagerService作为控制Activity启动的重要环节,这里在启动Service中也会起到重要的作用。 在ActivityManagerService中有一个startService方法: public ComponentName startService(IApplicationThread caller, Intent service,

2015-10-27 10:28:08 854

原创 Android5.0 源码分析--- Launcher启动应用的过程

Activity 启动过程 通过Luancher启动

2015-10-26 14:50:07 2076

原创 Android5.0 源码研究---进程间通信 Linux内核源码部分解析

什么叫进程间通信:一般而言,进程有单独的地址空间。我们可以了解下可执行程序被装载到内存后建立的一系列映射等理解这一点。如此以来意味着如果我们有两个进程(进程A和进程B),那么,在进程A中声明的数据对于进程B是不可用的。而且,进程B看不到进程A中发生的事件,反之亦然。如果进程A和B一起工作来完成某个任务,必须有一个在两个进程间通信信息和时间的方法。进程和线程不同,相同进程中的线程中的一些

2015-10-20 19:15:20 1279

原创 Java LinkedList详解源码研究

LinkeListJava源码

2015-10-19 17:28:10 449

原创 Android 5.0源码分析---智能指针

android 源码分析android c++智能指针

2015-10-19 09:17:36 591

原创 Java super与this关键字解析

1.super关键字调用超类(父类)中的方法(必须是protect 或 public)调用超类的构造器(必须作为构造器的第一条语句出现)(下面贴上代码)//父类class A { private String mA; public A(String a) { mA = a; }}//子类class B extends A { public B(String b) {

2015-10-18 19:18:51 345

原创 Java 类设计的准则----编程的良好习惯

一定要保证数据的私有性:编写一个访问方法和一个修改方法一定要对数据进行初始化:Java不会对局部变量进行初始化,但会对实例变量进行初始化(0, false, null)不要过多的基本数据类型将类的职责适当分解(过多也没有一个标准说法)类的变量名和方法名一定要体现他们的职责

2015-10-18 18:57:35 341

原创 静态代码块 初始化块 代码块的区别

public class Employee { //静态代码块-----------1 static { //do something... } //初始化块------------2 { //do something... } private void fun() { //代码块---------3 { //do something... }

2015-10-17 13:03:17 630

原创 Java中 构造函数与初始化块的执行顺序

先贴上一段类的代码public class Employee { private int age; private String name; { age = 2; //初始化块 } public Employee(String name, int age) { //构造函数 this.age = age; this.name = name; } }在Em

2015-10-17 12:36:30 416

原创 Java 无法调用默认构造函数

假设现在有一个类Class Employee { //.....................}如果你在类的定义中实现了一个有参的构造函数Employee(String name, int age)但你没有实现一个无参构造函数,那么编译器不会自动给你指定一个默认构造函数此时你调用Employee( ) //The constructor Employee() is un

2015-10-17 11:55:44 647

原创 Java String 中 “==” 与 equals()方法的区别

== 与 equals的区别

2015-10-16 17:59:14 408

原创 Java中 &&中的短路问题

expression1 && expression2expression1 和 expression2 是两个逻辑表达式,当expression1为假时,第二个表达式expression2不执行。

2015-10-16 17:13:18 476

原创 Java中数据类型的大小与范围

int // 4位 范围是20亿short // 2位 范围是3万long // 8位 范围超过地球总人数byte // 1位 -127 ~ 128

2015-10-16 16:53:17 531

空空如也

空空如也

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

TA关注的人

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