自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 系统启动流程分析之SystemServiceManager的startService函数流程分析

在SystemServer的启动流程中,初始化了一个SystemServiceManager对象,然后使用这个对象的startService启动了多个服务对象,因此,今天我们单独将这个函数拎出来分析一下SystemServiceManager初始化SystemServiceManager的初始化时在SystemServer的run函数中// Create the system service manager.mSystemServiceManager = new SystemServiceManag

2022-01-19 10:07:39 649

原创 安卓源码中打印调用堆栈的方法

Native层打印调用堆栈首先,先进入需要添加堆栈的进程代码,并在其Android.bp中添加shared_libs libutilscallstackcc_library { name: "libbinder", ...... shared_libs: [ "liblog", "libcutils", "libutils", "libutilscallstack", ], ......}然后在对应的

2022-01-15 09:30:00 566

原创 ServiceManager添加的系统服务汇总

SystemServer.javaServiceManager.addService("sec_key_att_app_id_provider", new KeyAttestationApplicationIdProviderService(context));ServiceManager.addService("scheduling_policy", new SchedulingPolicyService());telephonyRegistry = new TelephonyRegistr.

2020-12-26 20:59:03 1145

原创 C基础文件输入输出操作之write和read函数

一、 write函数1 函数头文件<unistd.h>2 函数原型ssize_t write(int handle, void * buf, int len);3 参数说明handle----文件句柄,主要是通过open函数打开指定文件得到的对应指定文件的索 引void * buf----表明要写入指定文件的数据,如char *型字符数组int len----写入指定文件的数据大小(数据的长度)4 返回值说明返回写入指定文件操作的结果,代表实际写...

2020-11-12 20:13:40 2664

原创 C Prime Plus编程练习(第十一章)

1. 设计并测试一个函数,从输入中获取下n个字符(包括空白、制表符、换行符),把结果储存在一个数组里,它的地址被传递作为一个参数#include &lt;stdio.h&gt;#include &lt;string.h&gt;#define STRLEN 20int main(void) { char words[STRLEN]; int spaceNum = 0...

2019-01-09 21:19:05 1440

原创 C Prime Plus编程练习(第十章)

1. 修改程序清单10.7的rain.c程序,用指针进行计算(仍然要声明并初始化数组)/* * rain.c * 计算每年的总降水量、年平均降水量和5年中每月的平均降水量 */#include &lt;stdio.h&gt;#define MONTHS 12#define YEARS 5const float rain[YEARS][MONTHS] = { { 4.3, 4...

2018-12-05 23:32:21 608

原创 C Prime Plus编程练习(第二章)

1.#include &lt;stdio.h&gt;int main(void) { printf("Gustav Mahler\n"); printf("Gustav \nMahler\n"); printf("Gustav"); printf(" Mahler\n"); return 0;}3.#include &lt;stdio.h&gt;int

2018-11-30 00:06:38 582

原创 (O)Settings分析之主界面加载流程

1.    前言本篇主要是为了记录Settings主界面的加载流程,为以后深入分析和记录在Settings应用做准备2.    流程    2.1    Settings 文件分析    首先,我们要分析Settings应用主界面的加载工作,需要先确认哪个文件为此应用的主Activity,从AndroidManifest.xml文件中&lt;activity-alias andro...

2018-07-31 20:57:17 2382 1

原创 (O)Settings分析之DrawerLayout布局分析

DrawerLayout是添加在v4包中的一个布局类Google官方对于DrawerLayout的解释如下:DrawerLayout acts as a top-level container for window content that allows for interactive "Navigation Drawer.drawer" views to be pulled out f...

2018-07-31 11:12:13 407

原创 (O)Telephony分析之通话流程分析(三)拨打电话流程分析(下)

三.Call的建立和传送先来看下代码static void processOutgoingCallIntent( Context context, CallsManager callsManager, Intent intent) { ...... // 拨打电话状态依旧为语音通话 final int videoS

2018-01-15 15:22:58 2350

原创 (O)Telephony分析之通话流程分析(二)拨打电话流程分析(上)

拨打电话,是从通话的拨号盘开始的,而拨号盘的界面是在DialpadFragment,因此,需要从这个地方进行分析一.拨号盘界面拨号流程public void onClick(View view) { ...... if (resId == R.id.dialpad_floating_action_button) { view.performHapticFee

2018-01-12 17:46:54 3352

原创 (O)Telephony分析之通话流程分析(一) TelecomManager的getTelecomService方法解析

这段时间,在研究Telephony相关的通话流程,虽然从书上看到通话流程,但是自己在分析Google 8.0的代码的时候,发现依旧有些复杂,现在就将自己的研究成果记录一下,以备后续查阅。一.TelecomLoaderService的初始化在此前的Android机器启动的流程中,分析过,SystemServer中启动系统的所有服务和进程,而在此文件中,我们会发现,TelecomLoaderS

2018-01-11 15:43:37 1564

原创 Android实现圆角背景点击效果

Android实现圆角背景点击效果

2017-11-28 20:23:03 827

原创 ContentProvider分析(一)之TelephonyProvider的初始化

在Telephony分析系列中,我们分析过PhoneApp的启动,是通过ActivityThread中调用Instrumentation类的onCreate方法来逐步启动PhoneApp应用的,但是当我们在分析PhoneApp的时候,发现在PhoneGlobals的onCreate方法中,TelephonyProvider的数据库已经建立(在查找APN的相关数据的时候),那么TelephonyPr

2017-09-16 13:38:58 1311

原创 (N)Telephony分析(七)之DataConnection建立

在前面,我们分析过DcTracker的初始化的时候,我们有看过,在DcTracker的构造方法中,调用有如下这个方法private void registerForAllEvents() { mPhone.mCi.registerForAvailable(this, DctConstants.EVENT_RADIO_AVAILABLE, null); mPhone.mCi.re

2017-09-15 15:19:19 2999

原创 (N)Telephony分析(六)之DcTracker的requestNetwork分析

在PhoneApp的初始化中,我们分析到,TelephonyNetworkFactory的初始化,最终会调用到DcTracker的requestNetwork方法private void onNeedNetworkFor(Message msg) { NetworkRequest networkRequest = (NetworkRequest)msg.obj; boolean

2017-09-14 23:17:01 1797

原创 (N)Telephony分析(五)之DcTracker的初始化

DcTracker对象的初始化,需要从前文中进行分析,我们来看看其的初始化PhoneFactory.javapublic static void makeDefaultPhone(Context context) { ...... for (int i = 0; i < numPhones; i++) { Phone phone = null;

2017-09-14 14:37:50 2349

原创 (N)Telephony分析(四)之PhoneApp初始化分析

从上一篇中,分析到,调用了PhoneApp的onCreate方法,从此进入了PhoneApp的世界,那么就需要看看其onCreate方法中究竟做了什么public void onCreate() { if (UserHandle.myUserId() == 0) { // We are running as the primary user, so sh

2017-09-13 21:43:35 1831

原创 Eclipse编译项目出现问题

今天在使用eclipse编译项目时,出现如下的问题出现这个问题的原因是,在编译项目的时候,使用的buildtools为sdk最新的编译工具,只需要在project.properties文件中添加sdk.buildtools=23.0.1即可

2017-08-30 15:17:16 709

原创 (O)ServiceManager分析(一)之BinderInternal.getContextObject

1. Binder, JNI函数的注册在分析BinderInternal的getContextObject函数之前,我们有必要先看一下Binder中JNI函数的注册情况android_os_Binder.cppint register_android_os_Binder(JNIEnv* env){ // Leo, 注册Binder的相关JNI函数 if (int_reg

2017-08-18 15:07:36 2327

原创 (N)Telephony分析(三)之PhoneApp启动

此前,分析过,SystemServer的启动,那么接着上篇,继续分析PhoneApp的启动首先,SystemServer启动时,进入其的main函数SystemServer.java文件public static void main(String[] args) { new SystemServer().run();}private void run() { ......

2017-08-02 13:33:34 1865

原创 (N)Telephony分析(二)之SystemServer启动

已经了解了zygote的启动,那么接着zygote启动,往后继续分析zygote在启动的时候,启动的是一个进程,为/system/bin/app_process,而这个app_process的进程,是在app_main.cpp文件中启动的,查看其main函数frameworks/base/cmds/app_process/app_main.cpp文件int main(int argc,

2017-07-27 21:02:03 606

原创 (N)Telephony分析(一)之zygote进程启动

Android是基于Linux系统的,而init进程是Linux系统的第一进程,因此,需要分析zygote的启动,首先就需要查看init进程的启动/system/core/init/init.cpp文件int main(int argc, char** argv) { ...... const BuiltinFunctionMap function_map; Act

2017-07-27 17:18:47 644

原创 (M)SIM卡开机流程分析之显示名称加载

前面有说过,SIM卡的开机流程是从PhoneFactory.java文件中的makeDefaultPhone方法开始的,SIM的displayName也是从这部分开始的,接下来记录一下自己的研究成果public static void makeDefaultPhone(Context context) { synchronized (sLockProxyPhones) {

2017-04-27 17:50:32 3648

原创 (M)SIM卡开机流程分析之SPN加载

本篇仅以USIM卡为例进行代码分析从之前对于UiccController.java文件进行分析中,我们知道UiccController中创建了UiccCard,而在UiccCard中创建了一个UiccCardAppliaction对象,而在UiccCardApplication的构造方法中,调用了如下方法:UiccCardApplication(UiccCard uiccCard,

2017-04-20 15:11:32 1505

原创 (M)SIM卡开机流程分析之默认APN设置

近日,一直在研究,默认APN的设置当我们从代码和手机中看到,默认APN的显示是从content://telephony/carriers/preferapn的数据中查询到的,而这个是通过shared preference来保存的,当手机第一次插卡开机后,我们将preferapn.xml文件导出来后,我们发现其中已经写有值了,但是从TelephonyProvider.Java文件中,我们却没有发

2017-03-27 00:31:55 9685

原创 (M)SIM卡开机流程分析之SubscriptionController类分析

首先,看看google对于SubscriptionController类的说明/** * SubscriptionController to provide an inter-process communication to * access Sms in Icc. * * Any setters which take subId, slotId or phoneId as a par

2017-03-11 15:31:25 5001

原创 (M)SIM卡开机流程分析之DefaultPhoneNotifier类分析

SIM卡开机流程,之前我们已经了解由PhoneFactory类的makeDefaultPhone方法中开始,在这个方法中,新建了一个DefaultPhoneNotifier对象sPhoneNotifier = new DefaultPhoneNotifier();那么,先看看google对DefaultPhoneNotifier类的介绍/** * broadcast intents *

2017-03-11 14:07:51 1479

原创 (M)SIM卡开机流程分析之RIL类分析

今天,来简单看一下SIM卡开机流程中的另一个重要的类,RIL.java首先,进入RIL.java文件中/** * RIL implementation of the CommandsInterface. * * {@hide} */// Leo,需要注意这个地方,继承自BaseCommands,实现了CommandsInterface的接口public final class

2017-03-09 23:06:12 1725

原创 (M)SIM卡开机流程分析之UiccController类分析

看看这个方法,定义一个UiccController对象UiccController.make(context, sCommandsInterfaces);// 单例模式public static UiccController make(Context c, CommandsInterface[] ci) { synchronized (mLock) { if (mIn

2017-03-02 15:02:14 1208

原创 (M)SIM卡开机流程分析之TelephonyManager类分析

首先在PhoneFactory的makeDefaultPhone方法中,调用了TelephonyManager.getDefault方法int numPhones = TelephonyManager.getDefault().getPhoneCount();查看TelephonyManager的getDefault方法// Leo, 全局变量 private static Tel

2017-03-02 11:05:45 5475

原创 (M)getSystemService解析

经常看到有类似于如下的语句,之前不知道这个究竟是如何返回一个TelephonyManager对象的,今天简单地看了下,发现其实这个也没有太过复杂(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);主要是调用了Context的getSystemService方法public abstract Objec

2017-03-01 17:46:48 499

原创 (M)SIM卡开机流程分析之TelephonyDevController类分析

查看PhoneFactory.java文件中的makeDefaultPhone方法中有如下代码 // create the telephony device controller. TelephonyDevController.create();查看TelephonyDevController.java文件,从google对于这个类的解释来看,/** * TelephonyDevCon

2017-03-01 15:48:35 1236

原创 (M)Activity详解之setContentView

在写一个Activity的时候,经常会先调用setContentView方法来设置Activity的布局,那么setContentView中究竟做了什么呢?public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDeco

2017-01-14 14:28:27 502

原创 (M)Activity详解之Activity启动

在ActivityThread.java中有一个handleLaunchActivity函数,是创建Activity的地方。// 创建Activity的入口 private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent) { ...... // Initiali

2017-01-12 14:23:16 862

原创 (M)SIM卡开机流程分析之主线分析

首先,PhoneFactory.java中通过方法makeDefaultPhone方法创建Phone对象,以及其他的对象,看一下PhoneFactory.makeDefaultPhone方法: /** * FIXME replace this with some other way of making these * instances */ pub

2017-01-10 21:00:24 1770

空空如也

空空如也

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

TA关注的人

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