自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

落魄影子

记录嵌入式技术生涯的点点滴滴!~~

  • 博客(103)
  • 资源 (6)
  • 收藏
  • 关注

原创 android framework之Applicataion启动流程分析(四)

总结下第三阶段干的任务:上图3中的ClientTransaction流程中,会进行一次跨进程调用,进入到app的进程,在主进程中会调用Binder线程IAppicationThread中的方法(它是app的子线程),就是在ClientTransactionHandler中会向主线程发送消息,这里又进行了一次子线程向主线程的消息传递过程,主线程在处理的时候,就会调用真正的执行触发器 mTransactionExecutor 去执行对应的transaction,触发生命周期的管理。

2023-09-07 21:07:12 626

原创 android framework之Applicataion启动流程分析(三)

application启动时,会通过AMS的IBinder远程调用ApplicationThread的BindApplication(),在创建App的时候,先创建Application对象,然后再进行installProvider等后续的处理,处理的过程主要做两件事,一个是创建ProcessRecord并登录在ProcessList中,然后是开始执行ActivityStackSupervisor的realStartActivityLocked方法,开启activity生命周期流程的执行。

2023-09-03 16:26:44 681

原创 android framework之Applicataion启动流程分析(二)

补充一个要点:ApplicationThread是什么?分析时需要注意的是,底层调用linux fork()接口之后,会有两个返回值,如果pid =0,表示返回的是子进程,如果pid >0,返回的是父进程(即zygote的程序运行路线),父进程(zygote进程)可以得知子进程的pid号。上一篇讲了Zygote是如何收到启动Application的启动消息,并一步步进入Fork(),下面来分析zygote fork启动application后,application进程后续处理操作,是如何真正的启动的。

2023-08-31 09:31:35 726

原创 android framework之Applicataion启动流程分析

但是现在要讨论的是APP进程不存在的时候,这个APP的启动流程,这种启动方式会覆盖所有app的启动流程。如果进程存在, 直接走上面的第五步,这一步的处理过程也是跨进程通信的,通过获取APP进程在AMS中的客户端代理即ApplicationThreadProxy, 通过这个代理Binder远程调用app进程的scheduleLauncherActivity()方法直接启动进程中的Activity,这个流程是基于APP进程已经存在了,所以走的是第5和6步分支。以上两种方式均可触发app进程的启动。

2023-08-28 23:03:10 1622

原创 android framework之AMS的启动管理与职责

通过Binder给到Application使用,我们需要将这些ATMS\AMS等服务的Binder注册进ServiceManager. Application要使用它们的时候,会去公共的ServiceManager中去查找对应的ATMS或AMS的binder,通过他们提供的Binder接口来使用这些服务的。解决办法:可以在类里面创建一个内部类(LiftCycle),内部类去继承需要的父类SystemService,在这个内部类里面与我们的外部类(ATMS)结合来完成所有的功能。把这些关键的信息收集起来。

2023-08-28 22:38:08 1015 1

原创 android系统启动流程之SystemServer运行过程

是SystemServer中的一个非常重要的类,得力助手,SystemServer通过它管理各种Services,如AMS, WMS, PKMS等,并且这些服务必须封装成一个对象,这个类就是SystemService,也就是说SysermServiceManager管理的都是SystemService的类对象。系统各类服务需要封装的类,每一种系统服务都要直接或间接的继续这个SystemService类,成为一个SystemService的类对象,方便让SystemServiceManager统一管理。

2023-08-27 22:48:32 214

原创 android系统启动流程之zygote如何创建SystemServer进程

前面的流程是说明Zygote进程如何fork创建出SystemServer进程,需要知道的是SystemServer进程被fork()出来之后,到底是如何运行的,如果这个逻辑研究明白了,Zygote fork其它进程后,它们的运行逻辑也是相同的。linux程序在调用fork之后,如果创建成功,会返回两个pid, 其中一个是孩子的pid,上面代码在这个过程分析的时候需要特别注意。它主要承担的职责是为APP的运行提供各种服务,像AMS,WMS这些服务并不是一个独立的进程,

2023-08-27 22:36:52 242

原创 android系统启动流程之zygote(Java)启动分析

因此,zygote进程的所有的目的是为了生孩子 ,通过zygote启动app,而app是java层代码,它要运行,需要JVM的支持,所以zygote需要先准备好Jvm提前准备好虚拟机,并且app在启动后,可能需要调用访问C++ Native代码,这时需要JNI的支持,所以JNI的注册也放到了zygote进程中,也提前准备好了。所需要的一些java资源,包括系统资源,系统库,classes,RES等,因为这些资源app的java都有可能去调用的。

2023-08-27 17:12:20 243

原创 android系统启动流程之zygote(Native)启动分析

zygote的程序源文件为app_main.cpp: 根据frameworks/base/cmds/app_process/Android.bp找到对应的cpp文件。也就是说app_process这个可执行程序的名称其实就是zygote, 它的C++源文件是app_main.cpp.zygote在启动时,在init.${ro.zygote}.rc脚本中,里面描述了zygote是如何被启动的,当init进程解析到zygote.rc文件时,将根据解析出来的命令启动zygote.

2023-08-27 16:34:30 191

原创 android系统启动流程之init启动分析

然后进入bootloader,在安卓系统中基本上这个bootloader是uboot, 通过uboot引导启动内核,此时运行在kernel空间,这时的idle属于内核中的进程,它的pid = 0,它负责初始化进程、内存、驱动等相关工作,随后由idle启动fork一个为init进程,这个属于用户空间的进程,pid = 1,然后再fork创建pid=2的kthreadd内核进程,这个是内核进程的鼻祖。init进程则是用户空间的鼻祖,应用空间的所有进程要么直接或间接都是由init进程创建的。

2023-08-27 08:41:12 446

原创 ServiceManager接收APP的跨进程Binder通信流程分析

它其实是一个独立的进程,由init解析init.rc文件并由它创建,要早于zygote进程,ServiceManager的main函数进程文件位于:framework/native/cmds/servicemanager/main.cpp。下面先给出一个非常重要的结论,就是ServiceManager的父类继承关系,最顶层的父类是IServiceManager和BBinder,后面的源码分析的时候这个很有用,否则看不懂代码。下面是ServiceManager在init.rc中的描述。

2023-08-26 23:02:09 423

原创 ServiceManger Binder的处理流程

通过前面的代码分析,可以得到一个结论,ServiceManager的Binder封装过程如下图所示:其它所有服务端提供的Service的Binder的封装逻辑也是相同的逻辑,举一反三。SM内存放着许多的数组,可以通过getService(String name)获取到对应用Binder,这是键值对。

2023-08-26 17:56:25 146

原创 APP Binder客户端调用全流程分析

现在要搞明白JAVA层app调用跨进程的Service接口时,它的binder是怎样从Java->jni-->native--->binder驱动的这条链路:就是上图中的左半部分从上至下的流程。上面就是整体的调用流程,非常的清晰明了。

2023-08-26 11:42:18 195

原创 APP调用bindService的跨进程调用过程

第5步:server收到schduleBindService()后不能直接把它的IBinder发给Client,它也只能通过AMS,所以它调用AMS的getService获取AMS服务。第7步:Server调用AMS的publishService服务,将Server的IBinder发送给Client,通过调用client的connected()接口。//拿到AMS的binder,然后调用它的publishService方法将Server端的binder送出去。//对象表示一个Service.

2023-08-26 10:03:15 188

原创 Binder通信的核心思想

通过本文了解Android通信机制的核心思想

2023-08-24 17:57:23 83

原创 Android硬件访问服务框架代码编写

思路从最上层调用到底层编写,流程如下:1 实现与APP直接对接的操作硬件的接口,这个最简单。只需要实现AIDL文件(Android Interface Define Language),其目的是让安卓系统自动帮我们实现对应用JAVA接口文件。PS:可以搜索源码中的例子比如:IVibrator.aidl,修改成如下代码:package.android.osInterfac

2016-05-13 18:37:09 2619 4

原创 Android硬件访问服务框架分析

如果某个硬件资源只能被某一个应用使用,可以使用下面的方法访问硬件:JAVA APP--->JNI_OnLoad()加载C库---->将JAVA三个地方法与C库函数进行关联并注册---->调用JAVA本地Native方法就可以访问C库的C接口------>进而访问硬件驱动中的open, read, write,从进访问硬件。但是,以上场景仅限于只有一个APP使用这个硬件资源,如果有多

2016-04-28 10:09:48 2577

原创 android应用如何访问C库

最近由于项目的开发需要,需要用到安卓系统,由此开始安卓的一些学习,下面只作为个人的一些记录。        安卓应用是由java编写的,而在android底层,如安卓底层的硬件驱动程序,都是由C/C++编写的,那应用层java是必须通过某种手段才能使用底层提供的硬件资源。毫无疑问,在java看要调用底层C实现的代码,中间必须要有一层接口,那就是JNI。本例要实现的就是JAVA如何访问底层C库。

2016-04-26 11:52:57 3989

原创 TI BLE CC2541 关于Notification的设置及应用

注:本文的主要目的是为了记录自己的学习过程,也方便与大家做交流。转载请注明来自:http://blog.csdn.net/ab198604一、修改从机端代码(Server端):A 对Profile的修改如果要使用Notification或Indification方法,必须在Profile中添加configuration,如下:

2015-12-04 12:45:41 16755 1

原创 TI BLE CC2541协议栈数据加密与解密功能

TI BLE

2015-12-04 12:30:21 3657

原创 C++回顾之前置++、后置++、不等号!及赋值运算符重载

关于前置++,后置++,非(不等号)运算符及赋值运算符的重载

2014-02-24 16:44:06 11991 1

原创 C++回顾之运算符重载

关于运算符重载

2014-02-19 10:46:31 1407

原创 C++回顾之友元

友元,友元函数与友元类

2014-02-14 17:13:52 1335

原创 C++回顾之static与单例模式

关于static与单例模式

2014-02-14 13:42:28 9382 2

原创 C++回顾之static用法总结、对象的存储,作用域与生存期

关于static用法总结,对象的存储,作用域与生存期

2014-02-13 15:15:37 2382

原创 C++回顾之深浅拷贝、禁止拷贝、空类的默认成员

C++的深拷贝与浅拷贝,关于禁止拷贝,以及空类的大小,系统提供的空类的默认成员函数

2014-02-12 18:36:43 3715 1

原创 C++回顾之const对象、const成员函数、mutable类型

总结const的各种用法,主要讲述const对象,及const 成员函数,还有mutable修饰的数据成员

2014-02-08 11:02:34 4278

原创 C++回顾之static成员、static成员函数及类对象大小计算

static静态数据成员,static静态成员函数,static静态常量数据成员,类大小的计算原则等

2014-02-08 10:14:37 3718

原创 C++回顾之拷贝构造函数

关于拷贝构造函数的使用方法及调用场景分析。

2014-02-07 20:14:06 1115

原创 C++回顾之类数据成员的初始化

构造函数初始化列表,类中的普通对象成员初始化,const成员及引用成员的初始化方法。

2014-02-06 14:46:54 2967 8

原创 C++回顾之构造函数与析造函数

构造函数,默认构造函数,析构函数,析构函数与delete等。

2014-02-06 13:56:37 1602

原创 C++回顾之前向声明、嵌套类、局部类

关于前向声明,嵌套类,局部类的使用。

2014-02-06 11:11:20 3478

原创 C++回顾之成员函数重载、类与结构体、this指针

关于内联成员函数,成员函数重载,类与结构体的区别,以及this指针的原理

2014-02-06 09:44:44 2197

原创 C++回顾之内联函数及新类型转换运算符

关于内联函数及类型转换运算符说明,const_cast, static_cast等

2014-02-05 20:39:57 1337

原创 C++回顾之引用

下面讨论引用的相关内容: 1 引用的概念 2 const引用 3 引用作为参数传递 4 引用作为函数返回值 5 引用与指针的区别

2014-02-05 17:26:27 1154

原创 C++回顾之开篇(bool, const限定符,#define, 结构内存对齐)

关于bool类型、const限定符使用、const与#define定义常变量的区别、结构体内存对齐的规则

2014-01-25 09:45:51 1980

原创 Model数据模型的检索查询

一旦创建了数据模型,我们可以利用django给我们提供的数据库抽象接口API来实现对象的创建,检索,更新或删除操作,使用非常方便。本文前提有以下数据模型:class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() def __unico

2013-10-18 17:50:51 3964

原创 models数据模型学习笔记

关于Django学习过程中的关于数据模型models的笔记,主要来自dnango官方文档,进行一些记录

2013-10-12 18:48:59 13180

原创 基于Twisted的网络服务器编写

开始此文档解释了如何使用twisted来实现网络协议栈的解析和TCP服务的处理。(相同的代码可以在SSL和Unix socket servers中复用。)protocol处理类一般从twisted.internet.protocol.Protocol中继承为子类,大多数的protocol handlers要么从这个类继承,或者从相应的子类中再继承。Protocol类的一个实例是每次

2013-05-29 11:03:43 6026 1

原创 用python编写网页爬虫

一、前期准备        为了完成一个网页爬虫的小程序,需要有以下准备:        1 了解基本的http协议        2 urllib2库接口熟悉        3 熟悉python正则表达式                二、程序编写思路        这里只是实现一个基本的网页爬虫程序,它的基本思路如下:        1 寻找到需要抓取的网页,查

2013-05-13 09:47:51 2854 3

HBase_The_Definitive_Guide

关于HBase的参考书,结合hadoop应用

2012-12-10

Understanding_the_Linux_Kernel__3rd_Edition

一部讲linux内核非常好的书 嘿嘿

2010-09-09

uCOS-II源码详解

ucos2的比较好的资源 大家可以看下 讲的还算详细

2010-08-25

Verilog进阶教程

Verilog教程 教程讲的比较仔细,看了就知道

2010-06-03

SOPC开发快速入门教程中文版

SOPC开发快速入门教程中文版 个人感觉比较好,能够快速入门

2010-06-03

空空如也

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

TA关注的人

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