![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
安卓
乌啼夜的酒痕
Android车载系统攻城狮
展开
-
【Settings开发】蓝牙模块(一)
概要蓝牙-bluetooth此名取自公元十世纪一位颇有作为的丹麦国王Harald bluetooth,是由爱立信公司于上世纪90年代牵头发展而来的一种短距离无线通信技术标准,其具有体积小、抗干扰、低功耗等特点,该协议目前由蓝牙技术联盟(SIG)负责维护管理。历史协议版本 协议版本 发布时间 主要特点 1.0/1.0B 1999 产品互操作性差...原创 2018-09-15 21:09:10 · 1654 阅读 · 4 评论 -
【Settings开发】WiFi模块(二)
前言 Wifi p2p是Android4.0以上用于用户之间端对端传输文件的协议,其不耗流量,且传输效率比蓝牙传输高的多。其操作流程如下:点击进入Wifi p2p设置页,华为手机一般在WLAN页的列表中可见,OPPO手机一般在其他无线连接页的列表中。 搜索附近可连接的p2p Devices。其搜索结果会以Preference的形式添加到列表中。 在可用的Devices列表中...原创 2018-09-12 14:59:32 · 1041 阅读 · 0 评论 -
【Settings开发】蓝牙模块(二)
蓝牙列表点击 在蓝牙设置页面,打开搜索到的蓝牙设备是以BluetoothDevicePreference的形式展示在PreferenceScreen中,当我们点击蓝牙列表中的蓝牙设备时,需根据此设备状态的不同做出不同的响应。 void onClicked() { int bondState = mCachedDevice.getBondState(); ...原创 2018-10-10 10:51:16 · 1640 阅读 · 0 评论 -
Android Init Language语法概述
init.rc概述 init.rc是Androrid的可配置初始化文件,其由init负责解析,在定制开发下可在init.rc中添加指令来改变系统启动过程。此配置文件使用的Android Init Language是一种类C风格的程序语言,主要由Actions、Commands、Services、Options四大板块的语句组成,一般一条语句占据一行,单词之间由空格分隔。 AIL语言的注释一...原创 2018-11-01 18:07:29 · 360 阅读 · 0 评论 -
深入理解Handler机制
消息机制概述 在Android系统主要的通信机制有binder机制和handler消息处理机制,前者多用于进程间的通信,后者则多用于进程内线程间的通信。其实,android进程就是基于消息驱动的。 一般而言,消息处理机制都应含以下几个要素:消息对象消息的投送者目标消息队列消息的处理(轮询器) 在Android系统中上述要素大致对应为Message、Handler、Messa...原创 2018-11-26 10:03:22 · 528 阅读 · 1 评论 -
深入理解Binder机制
Binder概述 Binder其前身是由Be Inc.和Palm,Inc.开发的OpenBinder,而后Google将其带入Android系统作为主要的跨进程通信技术使用。Binder之所以能被Google青睐跟其优越的传输性能及安全性能是分不开的。在传输性能上,传统的linux系统IPC如Socket、管道、消息队列等在跨进程传输时数据会被拷贝2次,而Binder则利用mmap只需一次拷贝...原创 2019-05-03 12:53:23 · 2332 阅读 · 3 评论 -
ZeroC Ice概述
The Internet Communications Engine(Ice)是一个面向对象的RPC框架,它可帮助您以最小的工作量构建分布式应用程序。其负责与底层网络编程接口的所有交互,使得开发者能够将精力集中在应用程序的逻辑处理上,而无需关心诸如打开网络连接、网络传输数据序列化与反序列化、失败重连等细节的实现。原创 2019-06-16 20:16:51 · 2818 阅读 · 0 评论 -
整车CAN网络介绍
整车CAN网络介绍CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正常CAN网络把所有其他的ECU全部放在Other ECU里边,如下图。 ECU(Electronic ControlUnit)电子控制单元,是汽车专用微机控制器,一个ECU...转载 2019-06-22 15:47:37 · 335 阅读 · 0 评论 -
深入理解AMS之Activity
Activity是我们开发中使用的最多、最频繁的程序组件。通过在AndroidManifest.xml中构建一个Activity标签,我们就可以通过startActivity方法将其以一个窗口页面的形式呈现在屏幕上,用户可以通过这个窗口进行诸如发短信、聊天、打电话等操作。原创 2019-07-06 16:33:14 · 1000 阅读 · 0 评论 -
深入理解AMS之启动过程
ActivityManagerService(以下简称AMS)是系统服务的一部分,它在SystemServer中被启动,主要负责四大组件状态管理与查询、进程创建与状态管理、Task切换与调度、cpu或mem等辅助状态监听等工作。它是系统核心服务,也是日常我们使用得最频繁的系统服务之一。原创 2019-07-30 22:19:21 · 1541 阅读 · 0 评论 -
深入理解AMS之Activity管理
Activity在应用端由ActivityClientRecord负责描述其生命周期的过程与状态,但最终这些过程与状态是由ActivityManagerService(以下简称AMS)来管理和控制的。类似于应用进程在AMS中使用ProcessRecord描述,安卓四大组件在AMS中也拥有对应的对象来描述。原创 2019-08-10 14:51:53 · 940 阅读 · 0 评论 -
深入理解AMS之应用进程创建
在安卓系统中诸多应用程序都会在桌面应用Launcher中创建一个shortcut启动图标,当我们点击这个图标就可以进入其所指示的应用程序首页,这个过程是通过调用ActivityManagerService(以下简称AMS)的方法startActivity()完成的。当调用startActivity()后AMS会首先判断当前进程是否已经创建,如果没有创建则会进入应用进程的创建流程。原创 2019-08-24 17:15:52 · 1285 阅读 · 0 评论 -
android5.0.1源码编译
1.git安装sudo apt-get install gitgit config –global user.email “android_wuhongyun@163.com”git config –global user.name “wuhongyun”2.repo安装mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/g...原创 2018-07-15 18:11:22 · 832 阅读 · 1 评论 -
【Settings开发】首页加载流程
Settings即安卓设置应用,用户可根据其偏好对android系统的各项功能、属性进行个性化配置。其源码位于/packages/apps/Settings目录下。原创 2018-07-13 14:42:51 · 576 阅读 · 0 评论 -
【Launcher延伸】窗口小部件Widget及时钟实例
前言 App Widget意为应用程序窗口小部件,可作为AppWidgetHostView(内部根据RemoteViews进行了重现)出现在其它应用程序(该程序中使用AppWidgetHost管理)中,作为其视图的一部分展示。且系统会定期发出自动更新信息更新Widget,当然,用户也可使用AppWidgetManager手动进行更新。Widget作为交互的一部分可满足应用在后台时占据...原创 2018-07-05 10:54:27 · 1754 阅读 · 0 评论 -
【IPC通信】Server如何知道Client崩溃
我们知道,Android是Google基于linux开发的操作系统,沙盒机制的存在使运行在用户空间的各应用程序之间无法直接感知对方并访问对方进程空间,以保护各app敏感数据和文件不受影响。而各进程之间常需要进行数据通信。所以Android提供了Binder机制来解决通常的进程间通信的问题。Binder驱动运行在内核空间,拥有更高的权限,来充当进程间的信使来传递数据有天然优势,它通过代理对象的方式在...原创 2018-05-27 20:10:04 · 1257 阅读 · 1 评论 -
【IPC通信】BindService调用流程
Binder正如其“粘合剂”的比喻一样,作为Android四大组件的沟通桥梁有着举足轻重的作用,通常我们在进程间通信时都需要使用它。当然,最常用的方就是使用BindService启动远程服务的方式了。在我们使用BindService...原创 2018-06-04 22:22:22 · 382 阅读 · 0 评论 -
【Launcher小知识点】拖拽轮廓的显示
在DragView的拖拽过程即onDragOver中,会不断的进行判断距离当前DragView中心点mDragViewVisualCenter最近的Cell以及两者的distance。如果发现最近的Cell位置没有被占用,那么就会在Cell位置画一个拖拽的轮廓。 在CellLayout的成员变量中声明了以下几组变量: private Rect[] mDragOutlines =...原创 2018-06-13 22:46:01 · 474 阅读 · 0 评论 -
【Launcher小知识点】拖拽过程中的排序
在DragView的拖拽过程中,会查找拖拽中心mDragViewVisualCenter最近的Cell位置,并根据Cell位置上是否已经被应用图标控件占据,分为两种情况。 1.没有被应用图标占据,那么则进入拖拽轮廓的显示。原创 2018-06-14 23:30:45 · 719 阅读 · 0 评论 -
【多线程】用HandlerThread管理线程和控制异常
为了更好的用户体验,Android系统中的耗时操作我们一般都在子线程中执行,从而避免影响用户点击或者布局渲染等处理。甚至在Android4.4版本之后直接在主线程进行网络请求系统会抛出NetWrokOnMainThreadException异常,以此要求我们使用Thread处理。但如果我们无节制的使用new Thread的方式创建线程,这对CPU来说无疑是灾难性的。正如此,Thread的线...原创 2018-06-07 22:57:05 · 1315 阅读 · 1 评论 -
【Launcher开发】Android桌面布局分析
安卓桌面主要由Launcher和SystemUI组成。SystemUI负责可下拉状态栏、导航栏、锁屏页面的显示;Launcher则作为桌面的主要部分,负责各应用与Widget的排列与增删,其布局可占到整个桌面的90%以上。所以我们有必要先从布局层面开始了解其构成。 从AndroidManifest.xml文件可以知道,Launcher.java是应用的主Activity,其布局也正是...原创 2018-06-09 00:08:09 · 4912 阅读 · 0 评论 -
【Launcher开发】拖拽过程分析(上)
不知你是否还记得桌面布局分析一文中的launcher.xml布局文件中根布局下嵌套的一个看似没啥用的DragLayer布局,它既不像Workspace那样作为PagedView容器占据大半江山,也不似HotSeat那样别有洞天。如果仅以布局的层面看,它更像是冗余存在。但它作为包裹布局,却实在有深层次的意义,今天我们就一起来揭下其神秘面纱。 我们知道,在安卓桌面长按某个应用图标时可以拖拽进...原创 2018-06-15 22:34:42 · 771 阅读 · 0 评论 -
【Launcher开发】启动流程分析
要了解Android桌面是如何启动的,我们有必要先从进程孵化器Zygote进程谈起,Zygote作为系统启动的第一个java进程,是所有其他java层进程的父进程,它依靠fork系统调用孵化出其它进程,可以大大减少各进程初始化环境的时间,而我们的SystemServer进程就是这样孵化出来的。下面是frameworks\base\core\java\com\android\internal...原创 2018-06-09 16:02:25 · 410 阅读 · 0 评论 -
【Launcher开发】数据库分析
前言 在Launcher项目中,WorkSpace及HotSeat的所有图标如ShortcutInfo、Folder、Widget等都需要用到持久化技术以根据用户喜好排列这些图标,并能在下次打开时很方便的找到目标应用或功能。Android持久化技术分为文件存储、SharedPreferences、数据库存储,这几种数据存储方式也各有优劣,文件储存一般用于存储图片、网络请求数据等文本数据或二进...原创 2018-06-24 23:07:50 · 1149 阅读 · 0 评论 -
【Launcher开发】拖拽过程分析(下)
上一篇中笔者分析了从WorkSpace的addInScreen方法中添加长按监听事件,到DragLayer拦截TouchEvent自己处理直到其TouchUp事件的drop方法流程。本篇则着重分析当打开文件夹时文件夹内部的拖拽以及从All Apps页面长按应用图标拖拽到WorkSpace页面的过程。 文件夹时从WorkSpace的bindItems方法中添加到WorkSpace中的:...原创 2018-06-17 17:07:07 · 551 阅读 · 0 评论 -
【Launcher开发】壁纸选择
在拖拽分析(上)一文中我们分析了WorkSpace长按事件监听位于Launcher.java的onLongClick方法中,其中WorkSpace会在onInterceptTouchEvent方法对TouchDown事件的位置进行判断,并使用setTag方法保存点击位置所在的cellInfo,如果cellInfo中的cell变量不为空则说明当前长按的是快捷图标,需进入startDrag进行拖拽;如果cell变量为空则说明长按处没有控件,进入壁纸选择的逻辑中,当时我们一语带过,没有深究。今天这篇文章则原创 2018-06-26 21:59:24 · 594 阅读 · 0 评论 -
【Launcher小知识点】home按键监听
在Android中我们没法通过onKeyEvent监听到home按键监听事件,而Launcher中当我们进入到all apps页面候点击home按键则需要返回到Workspace中,这又是如何做到的呢。有以下三种方式。其中前两者其它应用也可参照使用,第三种只对Launcher管用。原创 2018-06-28 10:38:43 · 1643 阅读 · 2 评论 -
深入理解AMS之startActivity
Activity作为作为安卓中直接与用户进行交互的页面,我们可以点击桌面Launcher的shortcut图标来进入应用程序主页面,在应用程序内也可以启动其他应用内或其他应用的Activity,虽然场景不同,但其启动方式却大同小异。原创 2019-09-14 22:02:29 · 1088 阅读 · 1 评论