用MediaPlayer说明sp的实现.sp是一个模板类,T是RefBase的子类.仅仅要继承于RefBase的类都能够使用sp. binder类也继承RefBase类,binder的实现离不开RefBase. 用例如以下代码说说我遇到的疑惑. 201 static sp<MediaPlayer> getMediaPlayer(JNIEnv* env, jobject thiz)  202 {                                                  …
经常会在android的framework代码中发现sp<xxx>和wp<xxx>这样的指针,平时看的时候都把他当成一个普通的指针封装过掉了,这几天终于忍不住了,想深入了解一下. 相关的代码: frameworks/base/include/utils/RefBase.h frameworks/base/libs/utils/RefBase.cpp sp和wp都是一个模板类,看一下sp类的定义: template <typename T> class sp { publ…
简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对象生命周期的机制.RefBase的子类在构造一个实际对象的同时,还会悄悄地构造一个影子对象. sp是strong pointer, wp是weak pointer, LightRefBase是轻量级的引用计数类,只有一个引用计数,为0就删除. RefBase,sp,wp中的引用计数 · RefBas…
首先RefBase在android的c++部分是作为一个所有类的基类,其作用跟Java中的Object类似 这个类中存在一个私有成员: weakref_impl* const mRefs;(weakref_impl是weakref_type的子类) 这个mRefs是“影子对象”,是管理一个对象的引用计数的关键 RefBase的构造中mRefs(new weakref_impl(this)),new一个weakref_impl对象,weakref_impl的构造形参是RefBase的指针 同时会初…
Android中px, ppi, dpi, dp, dip, sp概念解析…
当初跟踪Camera的代码中的时候一直追到了HAL层,而在Framework中的代码看见了许很多多的Thread.它们普遍的特点就是有一个threadLoop方法.依照字面的意思应该是这个线程能够循环处理数据.相应我想到到了java上层中的HandlerThread,这个预计也差点儿相同,但当时心里总有一个疙瘩.想弄清楚它为什么能够循环.还有它究竟是怎么循环起来的? Android中java世界的Thread 我们先来看看java是怎么创建一个线程的.这个是最舒服的,也是我最熟悉的. new T…
解析android framework下利用app_process来调用java写的命令及示例 在android SDK的framework/base/cmds目录下了,有不少目录,这些目的最终都是build出一个bin文件,再存放到/system/bin目录下,对于C/CPP写的命令,我们还是比较好理解的,都有一个main函数作为入口,但是在cmds目录下还有一些原生代码是java的,比如input.settings,那么这种类型的命令是怎么实现的呢? 笔者研习了原生的命令实现,写了一个dem…
前言 上一篇主要讲解了BootAnimation是从何而来,如何启动,从开机,到SurfaceFlinger服务起来,然后到执行开机动画,如果要深入的看里面的代码,是需要花一定的时间的,我们旨在了解大致的流程,具体流程中的函数,变量意义,具体实现,读者请自研. 由来已知,执行待述~ ###BootAnimation执行 1. 代码位置 frameworks/base/cmds/bootanimation 目录中包含如下文件 文件名 作用 Android.mk mk文件,编译模块使用 AudioP…
说究竟,Java层的service就是就C++层的binder的封装.所以从原理上来讲通过C++代码直接訪问android framework层的service是全然可能的,这篇文章以訪问WifiService为例,解说怎样去实现这个功能. 费话少说.直接上代码: WifiTest.cpp #include <sys/types.h> #include <unistd.h> #include <grp.h> #include <binder/IPCThreadSt…
Android5.0 Camera Framework 简介 CameraService启动 CameraService是在MediaServer启动过程中进行的 main_mediaserver.cpp (frameworks\av\media\mediaserver) ...... AudioFlinger::instantiate(); //audioflinger服务,音频相关 MediaPlayerService::instantiate(); //mediaplayerservice…
上一次讲解了一下CameraService的启动过程,今天梳理一下Camera预览的过程 StartPreview过程 首先,我们还是从应用层的使用入手 Camera.java (packages\apps\legacycamera\src\com\android\camera) Thread mCameraPreviewThread = new Thread(new Runnable() { public void run() { initializeCapabilities(); //初始化…
在源码环境下编译 Android framework编译出来的jar包classes.jar的位置  out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar 本文为博主原创文章,转载请注明出处 http://www.cnblogs.com/rencm/p/5659287.html…
Android Framework jar 包: class4.0.3 1.项目属性中的-Java Build Path,选择 Libraries,点击 “Add Library...”,添加 2.选择 “User Library”, 点击 “next”. 3.点击 "User Libraries..." , 在里面新建: 4.点击 “New...”, 弹出 新建User Library. 5.选中刚新建的 ”androidFramework“, 点击 ” Add External J…
Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Research/Development Education Required: Bachelors Degree Experience Required: 7 - 10 Years   Position Description - Responsible for Android Framework softw…
Linus有一句名言广为人知:Read the fucking source code. 但其实,要深入理解某个软件.框架或者系统的工作原理,仅仅「看」代码是远远不够的.就拿Android Framework来说,整个代码量非常大不说,那些个动辄几万行的类如何去理解?所以我今天要说的就是: Debug the fucking source code!! 之前分享过一个答案:大家遇到过什么 Android 兼容性问题?,这里面的有一些非常诡异的问题,我相信光靠看代码你是永远定位不出来的.还有我写的…
最近工作任务不忙,学习一下Android Framework方面的知识. 一.介绍,是什么 Android的Framework是直接应用之下的一层,叫做应用程序框架层.这一层是核心应用程序所使用的API框架,为应用层提供各种API,提供各种组件和服务来支持我们的Android开发,包括ActivityManager,WindowManager,ViewSystem等.下面贴一张学习Android时常见的Android系统架构图: 二.有什么 Android Framework框架包含了3个主要部…
博客首页:http://www.cnblogs.com/kezhuang/p/关于Activity的contentView的构建过程,我在我的博客中已经分析过了,不了解的可以去看一下<[Android FrameWork 6.0源码学习] Window窗口类分析>本章博客是接着上边那篇博客分析,目的是为了引出分析ViewRootImpl这个类.现在只是分析完了Window和ActivityThread的调用过程从ActivityThread到WindowManager再到ViewRootImp…
新博客地址 http://wossoneri.github.io/2018/09/15/[Android][Framework]create-system-service/ 做系统开发,有时候需要自己定义一些接口供App使用, 同时为了方便维护管理,就会需要自己建立一个服务,把新的功能集中在一起.下面就是新建一个系统服务的基本步骤. 添加接口 frameworks/base/core/java/android/app/IDemoManager.aidl package android.app;…
本文链接 http://wossoneri.github.io/2018/08/30/[Android][Framework]crop-SystemServer-and-SystemFeature/ SystemServer服务裁剪 有些系统,因为应用场景的不同,需要的服务也不一样.比如Android Things,为了应对IOT的应用场景,它就裁剪掉了很多服务.下面介绍一下裁剪服务的方法. 关于服务,要提一下SystemServer,具体介绍见另一篇文章:http://wossoneri.gi…
本文出处:http://www.cnblogs.com/wy123/p/6913055.html 执行计划的缓存与重用 在通过SQL Profile观察一个SQL语句或者存储过程是否有可用的缓存执行计划的时候,通过SP:CacheMiss和SP:CacheHit事件可以说明是否发生了编译/重编译和是否重用了缓存的执行计划,但是对于SP:CacheMiss这一细节,还是存在不少理解错误的情况的,本文通过一个简单的例子来解释说明SP:CacheMiss所表达的真实含义. 简单建个测试表,来测试使用…
从windows操作系统说起 人们总是喜欢从将陌生的事物和自己所了解的东西关联起来,以加深对未知事物的了解,这一讲我们从windows操作系统说起,逐步引领带大家走入android的世界.写任何程序都需要知道程序运行的原理和环境,就比如开发winform程序,你至少需要知道操作系统的原理,CLR运行时,了解一些常用的C/C++库.诚然,你不需要全部了解得很清楚也能写出很不错的应用程序,但是你了解的越清楚,钻研得越透彻,那么你越能开发出适合于你所在平台的.更优化的应用程序.譬如在windows操作…
Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Android的开发,现在开始研究应用框架层了. 记录 1.下载源码,目录如下: 2.Android系统的层次如下: 3.项目目录简单分析如下: 4.telphony目录 文件 描述 CellIdentityCdma //描述电信通信标识 CellIdentityGsm 描述移动通信标识 CellIdentit…
Framework是什么 Framework的中文意思是“框架”,在软件开发中通常指开发框架,在一个系统中处于内核层之上,为顶层应用提供接口,被设计用来帮助开发者快速开发顶层应用,而不必关心系统内核运行机制,通常Framework都会隐藏main函数等应用程序必须的组件,开发人员只需把精力放在功能代码的实现上. Android Framework Android Framework建立在顶层应用与C/C++库之间,主要由三部分组成:服务端.客户端.Linux驱动.它们的主要内容如下图所示:  A…
android framework 图解 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 Android是可用于移动设备上的一个软件堆,其中包含操作系统,中间件和关键应用的. 1 Features特性 2 Android体系结构图(Android系统的主要组件) 3 Android系统中各层的详细描述 3.1 Applications 3.2 Application Framework 3.3 Li…
这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会用到. 好了,废话不多说了.直接来吧.. Android 7.0系统源码下载\编译:http://blog.csdn.net/cjpx00008/article/details/67185045(这个链接并不是下载地址,而是对安卓系统编码的一个阐述,源码官网可以下载的) 这是Android 7.0系…
官网 Android framework源码git地址 github: https://github.com/android/platform_frameworks_base google 官方: https://android.googlesource.com/platform/frameworks/base.git 现在Android源码也迁移到了github, 就不像原来还需要FQ下载. 但是, github 的速度也不见得快. 在clone源码前需要选择相应的分支, 也可以直接使用主分支…
刚开始在 Mac 上用 Android Studio, 打开第一个项目就遇到了问题,描述如下: 上午9:: Frameworks detected: Android framework is detected in the project Configure 上午9:: FileNotFoundException: /Users/air/Library/Caches/AndroidStudio1./caches/names.dat.keystream.len (No such file or d…
DebugAndroidFramework 说明:调试Android Framework的Java部分代码,以调试源码android-28为例,需要一个API 28的模拟器配合使用. 一.下载源码 下载源码方式很多,由于调试Framework只需要java代码即可,这里使用Android Studio的SDK Manager下载,以下载android-28为例 下载完后,在sdk/sources下看到android-28源码 二.新建一个项目 包名cn.test.demo,避免com开头是因为源…
通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android 系统源码,今天我们来讲讲如何进行 Android 系统源码的调试,只有学会了如何进行系统源码的调试,才能帮助我们更高效地阅读跟理解源码. 我们知道,Android Framework 的代码主要由Java.C\C++等代码组成,因此,对于系统源码的调试,我们这里将其分为了两部分 Java 相关代码的调试 C\C+…
众所周知,Android是一个基于Linux实现的操作系统.但对于Linux内核来说,Android也仅仅只是一个运行在内核之上的应用程序,与其他运行在内核之上的应用程序没有任何区别. 所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源.当Framework完成初始化后才能继续启动相应的APK应用程序. Framework这么重要,那我们该如何学习呢? 关于如何学习Android Framework开发知识,最近有幸在前阿里技术…