自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Stupid bird's home

开始是进步的开始

  • 博客(131)
  • 资源 (4)
  • 问答 (3)
  • 收藏
  • 关注

原创 Binder机制原理分析(Java层)

1、背景谈到Binder相信大家肯定有所感触吧,我们平时肯定或多或少的接触一些,但是在分析Android源码之前我对其也是一头雾水,在网络上看到的关于Binder的文章也是似懂非懂,因为目前网络上关于Binder的文章大部分都是从C开始讲起的,对于我这个应用上层的人来说根本就没有心情看下去。 今天,通过我对源码的理解以及网络上关于Binder机制的介绍来简单的分析一下Binder在java层

2016-12-05 19:18:36 1999 1

原创 PackageManagerService源码分析之入门(一)

1、背景今天要分析的内容相信大家肯定都不会陌生,也许你平时没有直接去调用其方法,但是Android系统却无时无刻不在使用它,它就是我们今天要重点分析的Android核心服务PackageManagerService。平时也许你感觉不到它的存在,或许这就是所有服务的共性吧,但是它却在系统中举足轻重。比如平时我们在重启手机时,它都会在系统后台默默的将所有已安装的应用进行扫描操作,另外就是当我们在安装应用

2016-10-01 17:05:04 1507 1

原创 SystemServer启动流程之Zygote启动(一)

1、概述在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程fork出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因,而系统中比较重要的ActivityManagerService、PackageManagerService,WindowManagerService以及PowerManagerService等也是由其子进程System

2016-09-21 14:13:33 1148

原创 Android中Context源码分析(一)

Context源码解析

2016-08-24 20:39:42 1322

原创 Activity启动流程源码分析之入门(一)

Activity启动流程源码分析

2016-08-18 10:42:42 1587

原创 ActivityManagerService与应用程序通信分析

在开发Android应用程序的时候,相信用的最多的组件应该是Activity和Service,也许你对Activity和Service的生命周期早已了如指掌,当然这也是Android的基本功,但是你了解Activity和Service是如何被系统启动的,生命周期何时被调用吗?今天我们就从源码的角度来初探启动流程。本次探索的源码是基于Android5.1系统,其他版本系统如果有源码差异,请按照各

2016-07-28 19:08:52 3228 2

原创 C++问题总结

1.字符等输入问题//(1)char ch;cin >> ch;cin.get(ch);ch = cin.get();cout << ch << endl;//(2)string str;getline(cin,str);cout << str << endl;//(3)char name[20];cin.g...

2020-07-29 22:14:40 46

原创 C++中容器类详解

STL(Standard Template Library),即标准模板库。STL的一个重要特点是数据结构和算法的分离,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组;STL另一个重要特性是它不是面向对象的;(1)容器顺序容器(1)Vector连续存储结构,每个元素在内存上是连续的;支持高效的随机访问和在尾端插入/删除操作,但其他位置的插入/删除操作效率低下;(2)Deque是“doubl

2020-07-28 22:05:44 103

原创 C++中的几种数组:array,vector,valarray

array:STL容器,固定长度,目的为代替内置数组如int a[5] = {1,2};vector:STL容器,支持变长度;valarray:与STL无关,面向数值计算设计,支持数组乘法、加法等;(1)内置数组(C语言风格数组)数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。c++内置的原生数组可以存储一个固定大小的相同类型元素的顺序集合,并且其中的特定元素可以通过索引访问。它由连续的内存位置组成,最低的地址对应第一个元素,最高的地址对应最后一个元素。声明格式如下:type.

2020-07-23 16:49:03 90

原创 C++ 中char wchar_t char16_t char32_t的简单区别

首先这几种字符类型的首要区别就是其占用存储空间的大小不同。char 有一个字节表示,wchar_t 宽体字符,由两个字符表示。char16_t,char32_t C++ 11 新增的字符类型,char16_t 占两个字节,char32_t 占四个字节。初始化的方法不同:#include <iostream>#include <string>using namespace std;int main(){ char nameChar[] = "This is a cha

2020-07-21 15:40:43 250 1

原创 C++中4种类型转换方式

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a。 C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。转换类型操作符作用const_cast去掉类型的const或volatile属性static_cast无条件转换,静态类型转换dynamic_cast有条件转换,动态类型转换,运行时检查类型安全(转换失败返回NULL)reinterpret_cast仅重新解释类型,但没有进行二进制的

2020-07-20 14:57:06 67

原创 C++ 11 explicit关键字

在C++中,我们有时可以将构造函数用作自动类型转换函数(构造函数)。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即被explicit关键字修饰的类构造函数,不能进行自动地隐式类型转换,只能显式地进行类型转换。跟它相对应的另一个关键字是implicit,意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。demo1#include <iostream>#include <string>

2020-07-17 15:17:43 44

原创 C++ 相关智能指针

智能指针sp/wpAndroid中定义了两种智能指针类型,一种是强指针sp(strong pointer),另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强指针与一般意义的智能指针概念相同,通过引用计数来记录有多少使用者在使用一个对象,如果所有使用者都放弃了对该对象的引用,则该对象将被自动销毁。弱指针也指向一个对象,但是弱指针仅仅记录该对象的地址,不能通过弱指针来访问该对象,也就是说不能通过弱智真来调用对象的成员函数或访问对象的成员变量。要想访问弱指针所指向的对象,需

2020-07-17 11:31:23 27

原创 C++ 函数模板与类模板

1.函数模板函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,也即是说,函数模板代表一个函数家族。#include<iostream>template<typename T>T max(T const& a, T const& b){ return a<b?b:a;}int main(){ int a =10,b=20; int int_res = ::max(a,b); float c = 1

2020-07-16 14:40:12 31

转载 adb disable-verity提示lock

//无法adb remountadb disable-verityadb reboot//如果提示lock,先进行unlock操作,可按如下操作进行1.进入设置,开发者模式,打开OEM unlocking选项.2.adb reboot bootloader进入fastboot模式.3.连接电脑,输入命令fastboot flashing unlock,然后根据命令按音量上键解锁.//...

2019-12-06 15:20:15 2434

原创 C++ 何时使用引用参数(一些指导原则)

使用引用参数的原因:程序员能够修改调用函数中的数据对象通过传递引用而不是整个数据对象,可以提高程序的运行速度。当数据对象较大时(如结构和类对象),第二个原因最重要,这些也是使用指针参数的原因。这是有道理的,因为引用参数实际上是基于指针的代码的另一个接口。那么什么时候使用引用、什么时候使用指针?什么时候又应该按值传递呢?下面是一些指导原则:对于使用传递值而不做修改的函数:...

2019-11-22 14:57:42 58

原创 C++常用获取数组长度方式

1. 算术表达式:#include <iostream>int main() { int arr[4]; std::cout << sizeof( arr ) / sizeof( arr[0] ) << std::endl; // 输出4}或#include <iostream>int main() { i...

2019-11-19 14:36:24 132

原创 C++运算符优先级

C++运算符优先级表

2019-11-15 14:15:38 214

转载 Hal1 & Hal3 Mtk Camera Picture size和Preview size配置

在进行camera系统开发时,总会碰到产品需要,需要一个添加一个多少多少M的照片大小,比如产品经理说我们也要添加一个1:1,添加一个18:9的照片大小。这个情况很常见了,所以这篇文章总结一下平常工作中对这类问题的解决。我们可以看到打开camera app,有一个设置菜单或者选项,可以选择照片大小,比如是13M(18:9)、13M(16:9)、13M(4:3)、13M(1:1)等类型。13M就是指...

2019-08-22 14:21:49 562

原创 Camera1与Camera2区别

内容Camera1.0Camera2.0权限android.permission.CAMERAandroid.permission.CAMERA布局SurfaceViewTextureView实现接口SurfaceHolder.Callback 1.surfaceCreated 2.surfaceChanged 3.surfaceDestroyedSurfaceTexture...

2019-06-13 11:29:13 6202

转载 Android View坐标系

屏幕的左上角为坐标的原点,屏幕上边缘往右为X轴正方向,屏幕左边缘往下为Y轴正方向.(1)View自身坐标:getLeft(),getTop(),getRight(),getBottom()(2)View自身宽高: getWidth(),getMeasuredWidth(),getHeight(),getMeasuredHeight()(3)MotionEvent获取坐标:getX(),ge...

2019-06-13 11:28:50 1131

转载 Android View的平移、缩放、旋转等

1、移动View内容的相关变量和方法 (注意:是移动View所包含的内容,而非View本身)//View的内容相对于View在水平方向上的偏移量,以像素为单位 //当mScrollX为正数时,内容相对于View从右向左移动,反之则向从左向右移动 protected int mScrollX; //View的内容相对于View在垂直方向上的偏移量,以像素为单位 //当mScr...

2019-06-13 11:28:12 2468

原创 Android 手势基础 GestureDetector

当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,Android SDK给我们提供了GestureDetector(Ge...

2019-05-13 19:16:38 86

原创 Android中两种序列化方式的比较Serializable和Parcelable

Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用这两种序列化方式。还有,我们需要对象持久化到存储设备或者通过网络传输给其他客户端,这个使用也需要使用Serializale来完成对象的序列化。Serializable接口public class User1 implements Serializable{ ...

2018-11-15 19:33:47 130

原创 Android中隐式Intent的匹配规则

Android中系统组件的启动方式有显式启动和隐式启动,我们今天主要就了解一下隐式启动中的匹配规则。Intent Filter匹配规则只有action、category、data三方都匹配,Intent才算是匹配成功,进而才能打开相应的Component。一个Component若声明了多个Intent Filter,只需要匹配任意一个即可启动该组件。 &amp;amp;amp;amp;lt;activity a...

2018-11-15 10:41:54 1160

原创 Android中Application类的理解

首先,Application在一个Dalvik虚拟机里面只会存在一个实例,所以你不需要去弄什么单例模式来静态获取Application了,你把Application构造函数设置成private都不可能实现!那么为什么强调说是一个Dalvik虚拟机,而不是说一个App呢?因为一个App有可能有多个Dalvik虚拟机,也就是传说中的多进程模式。在这种模式下,每一个Dalvik都会存在一个Appli...

2018-11-09 17:10:10 274

原创 Android中ViewRootImpl类的分析

之前我们已经花了十一篇的博文分析了与ViewRootImpl相关的功能,今天我们就来总结一下ViewRootImpl。它的主要作用我的总结为如下:链接WindowManager和DecorView的纽带,或者可以说是Window和View之间的纽带;完成View的绘制过程,包括measure、layout、draw过程;向DecorView分发收到的用户发起的event事件,如按键/触屏...

2018-11-09 14:39:30 2159 1

原创 Android事件分发机制——示例(三)

前两篇文章我们已经分析了View和ViewGroup中通过dispatchTouchEvent进行事件分发,今天这篇文章我们通过示例来了解事件分发时的几种情况。示例//grouppublic class MyLinearLayout extends LinearLayout { private static String TAG = MyLinearLayout.class.getS...

2018-11-09 14:38:53 147

原创 Android事件分发机制——ViewGroup(二)

上一篇文章我们已经分析了Android事件分发机制——View(一),今天给大家带来ViewGroup事件分发的源码解析。案例public class MyLinearLayout extends LinearLayout { private static String TAG = MyLinearLayout.class.getSimpleName(); public My...

2018-11-09 14:38:00 330

原创 Android事件分发机制——View(一)

在分析分发机制之前,我们来了解一些预备知识。onTouch是优先于onClick执行,事件传递的顺序是先经过onTouch,再传递到onClick;MotionEvent对象的四种状态:MotionEvent.ACTION_DOWN:手指按下屏幕的瞬间。MotionEvent.ACTION_MOVE:手指在屏幕上移动MotionEvent.ACTION_UP:手指离开屏幕瞬间Mot...

2018-11-09 14:37:20 330

原创 Android事件分发机制——ViewRootImpl篇(前传)

我们都知道View事件的分发顺序是Activity—&amp;amp;amp;gt;Window—&amp;amp;amp;gt;View。//Activitypublic boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction();...

2018-11-09 14:36:44 1727

原创 Android视图绘制流程解析(四)

前三篇文章我们已经将View的绘制流程全部分析完毕了,今天我们说一下自定义View的重新绘制与更新应该如何操作?自定义View继承View和ViewGroup重写onMeasure(),onDraw()和onLayout()方法在onMeasure()方法中进行测量出自定义控件的宽和高并且调用setMeasureDimension(width,height)方法,将宽高配置好;然后再on...

2018-11-05 19:57:53 156

原创 Android视图绘制流程解析(三)

紧接着上一篇的分析Android视图绘制流程解析(二),我们接下来看onDraw进行绘制。onDraw()measure和layout的过程都结束后,接下来就进入到draw的过程了,draw()方法内部的绘制过程总共可以分为六步,其中第二步和第五步在一般情况下很少用到,因此这里我们只分析简化后的绘制过程。/* * Draw traversal performs severa...

2018-11-05 19:57:29 186

原创 Android视图绘制流程解析(二)

紧接着上一篇的分析Android视图绘制流程解析(一),我们接下来看onLayout进行布局。onLayout()布局是自上而下进行的,不同的是ViewGroup先在layout()中确定自己的布局,然后在onLayout()方法中再调用子View的layout()方法,让子View布局。在Measure过程中,ViewGroup一般是先测量子View的大小,然后再确定自身的大小。mView...

2018-11-05 19:57:02 200

原创 Android视图绘制流程解析(一)

大家都知道Android的任何一个视图都不可能凭空突然出现在屏幕上,它们都是要经过非常科学的绘制流程后才能显示出来的。而每一个视图的绘制过程都必须经历三个最主要的阶段,即onMeasure()、onLayout()和onDraw(),下面我们逐个对这三个阶段展开进行探讨。void scheduleTraversals() { if (!mTraversalScheduled) { m...

2018-11-05 19:48:42 464

原创 Window窗口机制(三)——WindowManager,ViewRootImpl,View理解

在之前的文章中我们说到DecorView在handleResumeActivity方法中被绑定到了WindowManager,也就是调用了windowManager.addView(decorView)。而WindowManager的实现类是WindowManagerImpl,而它则是通过WindowManagerGlobal代理实现addView的,我们来看一下addView()方法。publ...

2018-10-29 16:56:48 1300

原创 Window窗口机制(二)——Window,WindowManager理解

前一篇文章跟大家介绍了Window,PhoneWindow,DecorView之间的联系,接下来和大家讲解一下WindowManager相关,先来看一张图:ViewManagerpublic interface ViewManager{ public void addView(View view, ViewGroup.LayoutParams params); public...

2018-10-29 16:55:52 557

原创 Android窗口机制(一)——Window,PhoneWindow,DecorView理解

Windowpublic abstract class Window { public &amp;amp;lt;T extends View&amp;amp;gt; T findViewById(@IdRes int id) { return getDecorView().findViewById(id); } public abstract void setContentView(@Layout...

2018-10-24 15:23:44 1274

原创 Liunx常用系统命令大全

所有命令格式:命令名称 [命令参数] [命令对象] 所有命令:- -help可查看帮助(1)man可用于查看命令的具体可用参数与对象格式等等; 如: man man,man ls,man cat,man reboot等;(2)echo命令用于在终端显示字符串或变量,格式为:“echo [字符串 | 变量]”,可打印字符串和打印变量值等,如:echo $SHELL(3)dat...

2018-08-22 14:13:53 774

原创 C/C++友元

(1)概念(1)为什么要使用友元在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。即:为了使其他类的成员函数直接访问该类的私有变量,允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元函数: (1)运算符重载的某些场合需要使用友元。 (2)

2018-01-11 15:00:14 275

Eclipse 反编译插件

一、下载: 下载插件: jadclips插件网站: http://jadclipse.sourceforge.net/ 下载Jad反编译工具: http://www.kpdus.com/jad.html#download,在该页中找到适合自己操作系统平台的jad下载。下载后解压 二、安装: 三、设置参数: 启动eclipse,打开:Window->Preferences->Java->JadClipse. 1、Path to decompiler,这里设置反编译工具jad的全路径名,比如:%JAVA_HOME%\bin\jad.exe. 2、Directory for temporary files,这里设置临时文件路径。 四、安装完成后,eclipse自动将JadClipse Class File Viewer设置成class文件的缺省打开方式。如果没有默认,可以在Eclipse的Windows——> Perference——>General->Editors->File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer”。设置完成后,双击*.class文件,eclipse将自动反编译。 注: 对于存在源代码的类,它不会强行反编译,也就是说它还是会用eclipse自带的Class File Viewer查看class文件。

2013-03-23

java程序员,上班那点事儿

这是一款程序员必看的一部书籍,书中介绍了程序员应该怎么面试,怎样在以后的工作中排除困难等,本书是完整版,值得大家一看

2013-03-16

java的项目题目

适合有一定java基础的学习者使用!!通过书中的十五道题目,可以锻炼一下独自开发java项目的能力

2013-03-16

java核心技术

本书介绍了java的核心技术,可以让你真正的成为程序员的书籍,本书适合有一定的java基础的学习者使用,那样看会更方便

2013-03-16

空空如也

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

TA关注的人 TA的粉丝

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