自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

乌啼夜的酒痕

或许我 不该问 让你平静的心再起涟漪

  • 博客(34)
  • 收藏
  • 关注

转载 常见音频编码格式解析

MPEG-1 or MPEG-2 Audio Layer III是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3,是目前最流行的音频编码格式。  MP3文件是由帧(frame)构成的,帧是MP3文件最小的组成单位。MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即 Layer-1、Layer2、Layer3,且分别对应MP1、MP2、

2019-12-19 16:44:34 7841

原创 深入理解AMS之startActivity

Activity作为作为安卓中直接与用户进行交互的页面,我们可以点击桌面Launcher的shortcut图标来进入应用程序主页面,在应用程序内也可以启动其他应用内或其他应用的Activity,虽然场景不同,但其启动方式却大同小异。

2019-09-14 22:02:29 1347 1

原创 深入理解AMS之应用进程创建

在安卓系统中诸多应用程序都会在桌面应用Launcher中创建一个shortcut启动图标,当我们点击这个图标就可以进入其所指示的应用程序首页,这个过程是通过调用ActivityManagerService(以下简称AMS)的方法startActivity()完成的。当调用startActivity()后AMS会首先判断当前进程是否已经创建,如果没有创建则会进入应用进程的创建流程。

2019-08-24 17:15:52 1446

转载 fork( )函数详解

一、fork入门知识  一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。  一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相...

2019-08-20 21:39:36 482

原创 深入理解AMS之Activity管理

Activity在应用端由ActivityClientRecord负责描述其生命周期的过程与状态,但最终这些过程与状态是由ActivityManagerService(以下简称AMS)来管理和控制的。类似于应用进程在AMS中使用ProcessRecord描述,安卓四大组件在AMS中也拥有对应的对象来描述。

2019-08-10 14:51:53 1057

原创 深入理解AMS之启动过程

ActivityManagerService(以下简称AMS)是系统服务的一部分,它在SystemServer中被启动,主要负责四大组件状态管理与查询、进程创建与状态管理、Task切换与调度、cpu或mem等辅助状态监听等工作。它是系统核心服务,也是日常我们使用得最频繁的系统服务之一。

2019-07-30 22:19:21 1966

原创 深入理解AMS之Activity

Activity是我们开发中使用的最多、最频繁的程序组件。通过在AndroidManifest.xml中构建一个Activity标签,我们就可以通过startActivity方法将其以一个窗口页面的形式呈现在屏幕上,用户可以通过这个窗口进行诸如发短信、聊天、打电话等操作。

2019-07-06 16:33:14 1104

转载 整车CAN网络介绍

整车CAN网络介绍CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正常CAN网络把所有其他的ECU全部放在Other ECU里边,如下图。 ECU(Electronic ControlUnit)电子控制单元,是汽车专用微机控制器,一个ECU...

2019-06-22 15:47:37 372

原创 ZeroC Ice概述

The Internet Communications Engine(Ice)是一个面向对象的RPC框架,它可帮助您以最小的工作量构建分布式应用程序。其负责与底层网络编程接口的所有交互,使得开发者能够将精力集中在应用程序的逻辑处理上,而无需关心诸如打开网络连接、网络传输数据序列化与反序列化、失败重连等细节的实现。

2019-06-16 20:16:51 2921

转载 Win10 环境下安装Ubuntu 18.04过程记录

Win10 环境下安装Ubuntu 18.04过程记录步骤1:下载镜像文件从Ubuntu官网https://www.ubuntu.com/download/server下载系统的iso镜像文件 ,下载后不用解压,过程如下:步骤2:格式化U盘 ...

2019-06-03 12:00:26 323

原创 深入理解Binder机制

Binder概述  Binder其前身是由Be Inc.和Palm,Inc.开发的OpenBinder,而后Google将其带入Android系统作为主要的跨进程通信技术使用。Binder之所以能被Google青睐跟其优越的传输性能及安全性能是分不开的。在传输性能上,传统的linux系统IPC如Socket、管道、消息队列等在跨进程传输时数据会被拷贝2次,而Binder则利用mmap只需一次拷贝...

2019-05-03 12:53:23 2423 3

转载 Linux 设备驱动--- 内核等待队列 --- wait_queue_head --- wait_event_interruptible --- 按键驱动程序优化

等待队列:          在 Linux 驱动程序设计中,可以使用等待队列来实现进程的阻塞.          等待队列可以看作保存进程的容器,在阻塞进程时,将进程放入等待队列;    &nbs...

2019-04-21 12:29:58 199

原创 利用System.arraycopy判断多击事件

双击事件代码如下:```java long[] mHits = new long[2]; /** * 为主界面的回退事件做处理 */ @Override public void onBackPressed() { System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); mHits[mHits.length - 1] = SystemClock.uptimeMillis(); if (SystemClock.uptimeM

2019-03-31 21:32:43 436

原创 深入理解Handler机制

消息机制概述  在Android系统主要的通信机制有binder机制和handler消息处理机制,前者多用于进程间的通信,后者则多用于进程内线程间的通信。其实,android进程就是基于消息驱动的。  一般而言,消息处理机制都应含以下几个要素:消息对象消息的投送者目标消息队列消息的处理(轮询器)  在Android系统中上述要素大致对应为Message、Handler、Messa...

2018-11-26 10:03:22 968 1

原创 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 402

原创 【Settings开发】蓝牙模块(二)

蓝牙列表点击  在蓝牙设置页面,打开搜索到的蓝牙设备是以BluetoothDevicePreference的形式展示在PreferenceScreen中,当我们点击蓝牙列表中的蓝牙设备时,需根据此设备状态的不同做出不同的响应。 void onClicked() { int bondState = mCachedDevice.getBondState(); ...

2018-10-10 10:51:16 1758

原创 【Settings开发】蓝牙模块(一)

概要蓝牙-bluetooth此名取自公元十世纪一位颇有作为的丹麦国王Harald bluetooth,是由爱立信公司于上世纪90年代牵头发展而来的一种短距离无线通信技术标准,其具有体积小、抗干扰、低功耗等特点,该协议目前由蓝牙技术联盟(SIG)负责维护管理。历史协议版本 协议版本 发布时间 主要特点 1.0/1.0B 1999 产品互操作性差...

2018-09-15 21:09:10 1790 4

原创 【Settings开发】WiFi模块(二)

 前言    Wifi p2p是Android4.0以上用于用户之间端对端传输文件的协议,其不耗流量,且传输效率比蓝牙传输高的多。其操作流程如下:点击进入Wifi p2p设置页,华为手机一般在WLAN页的列表中可见,OPPO手机一般在其他无线连接页的列表中。 搜索附近可连接的p2p Devices。其搜索结果会以Preference的形式添加到列表中。 在可用的Devices列表中...

2018-09-12 14:59:32 1188

原创 【Settings开发】WiFi模块(一)

概要    本篇主要介绍Settings应用的WiFi模块首页如何控制WiFi功能的开关,及如何扫描及连接一个WiFi热点。使用到的类说明    WiFiManager:提供基础的api来管理WiFi的联通性等操作。    Scanner: 负责扫描WiFi。    WiFiEnabler:内部包含SwitchUI控件,用户可点击此控件打开或者关闭WiFi。    AccessPoint:继承自P...

2018-07-16 11:39:45 1917

原创 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 879 1

原创 【Settings开发】首页加载流程

    Settings即安卓设置应用,用户可根据其偏好对android系统的各项功能、属性进行个性化配置。其源码位于/packages/apps/Settings目录下。

2018-07-13 14:42:51 618

原创 【Launcher延伸】窗口小部件Widget及时钟实例

    前言    App Widget意为应用程序窗口小部件,可作为AppWidgetHostView(内部根据RemoteViews进行了重现)出现在其它应用程序(该程序中使用AppWidgetHost管理)中,作为其视图的一部分展示。且系统会定期发出自动更新信息更新Widget,当然,用户也可使用AppWidgetManager手动进行更新。Widget作为交互的一部分可满足应用在后台时占据...

2018-07-05 10:54:27 1838

原创 【Launcher小知识点】home按键监听

在Android中我们没法通过onKeyEvent监听到home按键监听事件,而Launcher中当我们进入到all apps页面候点击home按键则需要返回到Workspace中,这又是如何做到的呢。有以下三种方式。其中前两者其它应用也可参照使用,第三种只对Launcher管用。

2018-06-28 10:38:43 1771 2

原创 【Launcher开发】壁纸选择

在拖拽分析(上)一文中我们分析了WorkSpace长按事件监听位于Launcher.java的onLongClick方法中,其中WorkSpace会在onInterceptTouchEvent方法对TouchDown事件的位置进行判断,并使用setTag方法保存点击位置所在的cellInfo,如果cellInfo中的cell变量不为空则说明当前长按的是快捷图标,需进入startDrag进行拖拽;如果cell变量为空则说明长按处没有控件,进入壁纸选择的逻辑中,当时我们一语带过,没有深究。今天这篇文章则

2018-06-26 21:59:24 650

原创 【Launcher开发】数据库分析

前言    在Launcher项目中,WorkSpace及HotSeat的所有图标如ShortcutInfo、Folder、Widget等都需要用到持久化技术以根据用户喜好排列这些图标,并能在下次打开时很方便的找到目标应用或功能。Android持久化技术分为文件存储、SharedPreferences、数据库存储,这几种数据存储方式也各有优劣,文件储存一般用于存储图片、网络请求数据等文本数据或二进...

2018-06-24 23:07:50 1194

原创 【Launcher开发】拖拽过程分析(下)

    上一篇中笔者分析了从WorkSpace的addInScreen方法中添加长按监听事件,到DragLayer拦截TouchEvent自己处理直到其TouchUp事件的drop方法流程。本篇则着重分析当打开文件夹时文件夹内部的拖拽以及从All Apps页面长按应用图标拖拽到WorkSpace页面的过程。    文件夹时从WorkSpace的bindItems方法中添加到WorkSpace中的:...

2018-06-17 17:07:07 594

原创 【Launcher开发】拖拽过程分析(上)

  不知你是否还记得桌面布局分析一文中的launcher.xml布局文件中根布局下嵌套的一个看似没啥用的DragLayer布局,它既不像Workspace那样作为PagedView容器占据大半江山,也不似HotSeat那样别有洞天。如果仅以布局的层面看,它更像是冗余存在。但它作为包裹布局,却实在有深层次的意义,今天我们就一起来揭下其神秘面纱。    我们知道,在安卓桌面长按某个应用图标时可以拖拽进...

2018-06-15 22:34:42 824

原创 【Launcher小知识点】拖拽过程中的排序

在DragView的拖拽过程中,会查找拖拽中心mDragViewVisualCenter最近的Cell位置,并根据Cell位置上是否已经被应用图标控件占据,分为两种情况。 1.没有被应用图标占据,那么则进入拖拽轮廓的显示。

2018-06-14 23:30:45 798

原创 【Launcher小知识点】拖拽轮廓的显示

    在DragView的拖拽过程即onDragOver中,会不断的进行判断距离当前DragView中心点mDragViewVisualCenter最近的Cell以及两者的distance。如果发现最近的Cell位置没有被占用,那么就会在Cell位置画一个拖拽的轮廓。    在CellLayout的成员变量中声明了以下几组变量:    private Rect[] mDragOutlines =...

2018-06-13 22:46:01 525

原创 【Launcher开发】启动流程分析

    要了解Android桌面是如何启动的,我们有必要先从进程孵化器Zygote进程谈起,Zygote作为系统启动的第一个java进程,是所有其他java层进程的父进程,它依靠fork系统调用孵化出其它进程,可以大大减少各进程初始化环境的时间,而我们的SystemServer进程就是这样孵化出来的。下面是frameworks\base\core\java\com\android\internal...

2018-06-09 16:02:25 449

原创 【Launcher开发】Android桌面布局分析

    安卓桌面主要由Launcher和SystemUI组成。SystemUI负责可下拉状态栏、导航栏、锁屏页面的显示;Launcher则作为桌面的主要部分,负责各应用与Widget的排列与增删,其布局可占到整个桌面的90%以上。所以我们有必要先从布局层面开始了解其构成。    从AndroidManifest.xml文件可以知道,Launcher.java是应用的主Activity,其布局也正是...

2018-06-09 00:08:09 5020

原创 【多线程】用HandlerThread管理线程和控制异常

    为了更好的用户体验,Android系统中的耗时操作我们一般都在子线程中执行,从而避免影响用户点击或者布局渲染等处理。甚至在Android4.4版本之后直接在主线程进行网络请求系统会抛出NetWrokOnMainThreadException异常,以此要求我们使用Thread处理。但如果我们无节制的使用new Thread的方式创建线程,这对CPU来说无疑是灾难性的。正如此,Thread的线...

2018-06-07 22:57:05 1377 1

原创 【IPC通信】BindService调用流程

    Binder正如其“粘合剂”的比喻一样,作为Android四大组件的沟通桥梁有着举足轻重的作用,通常我们在进程间通信时都需要使用它。当然,最常用的方就是使用BindService启动远程服务的方式了。在我们使用BindService...

2018-06-04 22:22:22 412

原创 【IPC通信】Server如何知道Client崩溃

我们知道,Android是Google基于linux开发的操作系统,沙盒机制的存在使运行在用户空间的各应用程序之间无法直接感知对方并访问对方进程空间,以保护各app敏感数据和文件不受影响。而各进程之间常需要进行数据通信。所以Android提供了Binder机制来解决通常的进程间通信的问题。Binder驱动运行在内核空间,拥有更高的权限,来充当进程间的信使来传递数据有天然优势,它通过代理对象的方式在...

2018-05-27 20:10:04 1297 1

空空如也

空空如也

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

TA关注的人

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