自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(309)
  • 资源 (35)
  • 收藏
  • 关注

原创 Android Binder——数据传输限制(二十三)

当一个 Launcher 启动一个 APP 的时候,AMS 会通知 Zygote 进程 fork 出一个 APP 进程,然后加载 APP 进程的功能类 ActivityThread。APP 进程初始化(1)调用到 Native 层的 ProcessState 来获得 Binder 驱动的设备文件"/dev/binder"的文件描述符,并内存映射。(2)通过ProcessState启动Binder线程池,并且创建Binder主线程。该线程池对于当前进程有且仅有一个。

2024-04-24 08:58:59 238

原创 Android Binder——Parcel数据处理流程(二十二)

上一篇我们对 Parcel 进行了简单的介绍。这里我们选两个代表性的数据类型(String 和 Binder)来分析 Parcel 的处理流程,对应的接口分别是:writeString() / readString() 和 writeStrongBinder() / readStrongBinder()。接着上一篇从 Parcel C++ 类的构造过程开始分析。

2024-04-24 08:58:34 9

原创 Android Binder——数据传递载体(二十一)

同一进程间的对象传递都是通过引用来做的,因而本质上就是传递了一个内存地址。而跨进程采用了虚拟内存机制,两个进程都有自己独立的内存地址空间,所以跨进程传递的地址值是无效的。进程间的数据传递是 Binder 机制中的重要一环,Android 系统中担负这一重任的就是 Parcel。Parcel 是一种数据的载体,用于承载希望通过 IBinder 发送的相关信息(包括数据和对象引用)。正是基于 Parcel 这种跨进程传输数据的能力,进程间的 IPC 通信才能更加平滑可靠。

2024-04-23 08:56:41 34

原创 Android Binder——APP中AIDL解析(二十)

一个从 Client 到 Server 的调用流程总结如下:通过 bindService() 让 Zygote 进程 fork 出 Server 进程,完成 Server 进程的初始化功能加载。同时建立 Client 和 Server 的关系;

2024-04-23 08:56:20 94

原创 Android Binder——APP中AIDL实现(十九)

AIDL(Android Interface Definition Language)其实就是对 Binder 通信的一个封装,方便在开发中对 Binder 通信的使用,这里我们就从头开始来看一下 AIDL 通信的创建过程。

2024-04-22 10:48:43 231

原创 Android Binder——APP中的Binder通信(十八)

在 APP 开发中,四大组件中的 Activity 和 Service 是其中最常见的,在 Activity 启动 Service 的时候经常用到 bindService() 方法,而这就是建立 Binder 通信的过程。这一篇内容我们就来分析一下这里的 Binder 通信。

2024-04-22 10:48:09 35

原创 Android Binder——Java获取系统服务(十七)

对于获取服务应该比较熟悉了吧,前面的很多内容都有获取系统服务的调用,这一篇我们就来详细介绍一下获取服务的流程。

2024-04-18 08:58:54 208 1

原创 Android Binder——Java层通信实例(十六)

前面的文章中我们介绍了 Java 层服务的注册流程,以及代理文件的查找。这里我们看一个 Binder 通信的实例,为了方便我们就以 Android 源码中现有的功能 PMS 的 install 为例,PMS 在进行 APK 安装时,会进行 dex 的翻译,依赖守护进程 installd 完成。

2024-04-18 08:58:23 408

原创 Android Binder——Java层代理文件解析(十五)

上一篇文章介绍到 ServiceManager 的 addService() 方法最终调用到 BinderProxy 的 addService() 方法。这里我们继续分析。

2024-04-17 08:48:39 205

原创 Android Binder——Java层服务注册流程(十四)

对于 Java 端使用 Binder 服务,主要就是注册服务和获取服务,入口都是通过 ServiceManager.java 中的对应方法实现。这里我们就先介绍一下 Java 注册 Binder 服务的流程。

2024-04-17 08:47:31 124

原创 Android Binder——C++层获取服务(十三)

通过 defaultServiceManager() 获取到 servciemanager 的代理 BpServiceManager;通过代理 BpBinder 调用 getService(),而 service 的 Binder 通过checkServcie() 获取;调用 BpBinder->transact() 将 code 、data、reply 传入,IPCThreadState->transact() 会 talkWithDriver() 调用;

2024-04-16 08:51:55 107 3

原创 Android Binder——C++层注册服务实例(十二)

前面几篇内容都介绍了 C++ 中新增服务的调用流程,这里我们看一个 Android 源码中的实例进一步熟悉 C++ 服务的添加流程,这里以 MediaPlayerService 为例。

2024-04-16 08:51:21 133

原创 Android Binder——SM添加服务解析(十一)

上一篇我们介绍到,C++ 层通过代理调用 addService 最终调用到了 ServiceManager.cpp 的 addService() 方法,这里我们继续分析。

2024-04-15 09:36:49 35

原创 Android Binder——C++层注册服务流程(十)

上一篇文章我们介绍了 Native 层获取 binder 的代理服务,这里我们针对注册服务流程接着往下看。

2024-04-15 09:36:17 130

原创 Android Binder——C++层获取Binder代理服务(九)

Client 端通过 defaultServiceManager() 接口调用获取到 sp 实例,而这个实例是全局变量 gDefaultServiceManager,其实就是 ServiceManagerShim 类型的对象;使用 ServiceManagerShim 类型的目的其实就是为了封装 AidlServiceManager,即该类中的成员变量 mTheRealServiceManager;

2024-04-07 09:02:37 287 1

原创 Android Binder——APP启动Binder线程池(八)

APP 进程 Binder 初始化过程和 ServiceManager 进程相差不大:(1)通过 open_driver() 打开设备文件 "dev/binder",获得该设备文件描述符,和 Binder 驱动进行交互;(2)与 ServiceManager 进程打开设备文件不同的是,APP 进程使用的是系统默认的最大线程数 15,而 servicemanager 设置为 0;

2024-04-07 09:01:55 69

原创 Android Binder——Kernel层介绍(七)

Android Binder 的 Kernel 层也就是 Binder 的驱动层,位于 Binder 结构的最底层,这部分用于实现 Binder 的设备驱动。

2024-04-03 08:57:23 341

原创 Android Binder——ServiceManager初始化(六)

上一篇文章介绍到 servicemanager 的 main 函数中主要做了四件事:1)初始化 binder 驱动。2)将自身以“manager”添加到 servicemanager 中的 map 集合中。3)注册成为 binder 驱动的上下问管理者。4)给 Looper 设置 callback,进入无限循环,处理 client 端发来的请求。这里我们对其进行详细介。

2024-04-03 08:56:38 283 1

原创 Android Binder——Native层介绍(五)

Binder Native 层主要负责实现进程间通信(IPC)和远程过程调用(RPC)的机制。在 Native 层中,Binder 架构主要包括服务端和客户端两部分。服务端存在一个 Binder 实体(BBinder)和对应的实体接口(BnInterface),而客户端存在一个 Binder 代理(BpBinder)和对应的代理接口(BpInterface)。服务端通过 Binder 驱动向 ServiceManager 进行注册,将 BBinde r的实体对象存入 ServiceManage r中。

2024-04-02 09:14:58 686 1

原创 Android Binder——JNI层介绍(四)

JNI(Java Native Interface)是 Java 平台提供的一种机制,允许 Java 代码与本地应用程序(如C/C++)进行交互。在 Android 中,JNI 层主要用于实现 Java 层与底层 C/C++ 代码之间的通信。通过 JNI,Android 系统可以将一些性能要求较高的功能(如图像处理、音频处理等)用 C/C++ 实现,以提高系统的运行效率。本地方法实现:Java 层通过 JNI 调用底层 C/C++ 代码实现的方法。这些方法可能涉及到底层硬件操作、性能优化等。数据转换。

2024-04-02 09:14:24 690

原创 Android Binder——Java层介绍(三)

对于 Android 系统,一般是从 java 层到 native 层,再到 kernel 驱动层,形成一个完整的软件架构。Android 系统中的 Binder IPC 通信机制的整体架构也是如此,Java 和 C++ 层都定义有同样功能的供应用程序使用的 Binder 接口。

2024-04-01 10:53:43 701

原创 Android车载设备开发相关名词介绍

如遭遇紧急情况,用户可按下该键以最高优先级接通呼叫中心,人工坐席将同时获取客户车辆的重要数据并协助驾驶员脱离危险。

2024-04-01 10:51:35 1249

原创 Android 开发制作系统签名

这种方式不需要系统源码编译环境,可以直接对 apk 文件进行签名。

2024-03-21 09:17:29 567 1

原创 Android Handler使用介绍

Android 中的 Handler 是用来和线程通信的重要工具。它主要用于在后台线程中执行任务,并将结果传递回主线程以更新用户界面。

2024-03-21 09:16:00 1725 2

原创 Android 车联网——CarWatchdogService介绍(二十)

CarWatchdogService 是一个安卓汽车平台中的服务,用于监控和管理车载系统的健康状态,它定期监视系统中的各个组件,以确保它们始终处于活动状态,并在出现故障时进行修复或重启。该服务可以帮助确保平台的稳定性和可靠性,防止应用程序挂起或系统崩溃。主要功能系统监控: 该服务会定期检查车载系统的运行状态,包括各个关键组件的活动情况、资源利用情况等。它可以监测是否有进程崩溃、占用过多资源、出现死锁等异常情况。异常检测: 该服务可以检测车载系统中的异常情况,并及时采取措施处理。

2024-03-20 08:58:41 311

原创 Framework基础——Zygote初始化(六)

所有的进程都由 Zygote 创建,Zygote 主要用来孵化 system_server 进程和应用程序进程。在孵化出第一个进程 system_server 后通过 runSelectLoop 等待并处理消息,分裂应用程序进程仍由 system_server 控制,等待 AMS 给他发消息(告诉 zygote 创建进程),如 app 启动时创建子进程。在 ZygoteInit.main 函数中进入 Java 层,主要有4个关键步骤:1)预加载类和资源——preload()

2024-03-20 08:57:54 279

原创 Android AMS——进程优先级更新(二十)

AMS 中的 updateOomAdjLocked 方法实现了进程优先级的动态更新。每个等级的进程又有对应的优先级,使用oom_adj值来表示,进程回收机制就是根据这个adj值来进行的 前台进程adj值最低,代表进程优先级最高,空进程adj值越高,最容易被kill,对于相等优先级的进程:使用的内存越多越容易被杀死。

2024-03-19 08:46:59 143

原创 Android AMS——进程LRU列表更新(十九)

AMS对进程的管理主要体现在两个方面:进程LRU列表动态更新:动态调整进程在mLruProcesses列表的位置进程优先级动态调整:实际是调整进程oom_adj的值。这两项调整和系统进行自动回收有关,当内存不足时,系统会关闭一些进程来释放内存,下面就依据这两方面来看下 AMS 是如何管理进程的。

2024-03-19 08:46:30 176

原创 Ubuntu(乌班图)相关功能配置

在使用 greeit 的时候,经常会需要配置 ssh 的网络配置和密钥信息。

2024-03-18 09:15:46 871 1

原创 Android 性能优化——APP启动优化

自定义控件和UI部件,不管这些控件是否支持 xml 化,实现它们的代码质量很重要,要尽可能简化它们的构造过程。

2024-03-18 09:15:03 1742 1

原创 Android PMS实战——PMS的Hook(十五)

通过前面的学习,我们都知道 PMS 是通过 ContextImpl 类中的 getPackageManager 这个方法来获取的。

2024-03-01 08:58:07 465 1

原创 Android PMS实战——Hook技术介绍(十四)

Hook 是“钩子”的意思,在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而“钩子”的意思,就是在事件传送到终点前截获井监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。Hook 的这个本领,使它能够将自身的代码“融入”被勾住(Hook)的程序的进程中,成为目标进程的一个部分。

2024-03-01 08:57:42 214

原创 Android PMS——系统更新和版本管理(十三)

当一个新的系统版本发布时,PMS 会确保已安装的应用与新版本系统兼容,以避免潜在的运行时错误。通常整个检测过程遍布各个位置,来保证应用程序能够正常运行。

2024-02-28 09:19:48 89

原创 Android PMS——权限控制分析(十二)

PMS 中的权限控制通过权限管理和权限请求两个方面来实现。应用在 Android 系统中需要声明和请求权限,PMS 则会根据应用声明的权限和用户的选择来进行权限的管理和控制。

2024-02-28 09:19:05 534

原创 Android PMS——权限基础介绍(十一)

Android 将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限。每种权限类型都指明了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。

2024-02-27 14:35:58 250

原创 Android PMS——应用程序卸载流程(十)

从 PMS(Package Management System)源码的角度来分析应用程序的卸载流程,以下是主要步骤:用户发起卸载请求:用户在设备上选择要卸载的应用程序,并触发卸载操作。通常是通过应用商店、系统设置或应用程序管理器等界面进行操作。调用 PMS 接口:当用户发起卸载请求后,相应的界面会调用 PMS 提供的接口,传递要卸载的应用程序包名。停止应用程序组件:在卸载过程中,PMS 首先会停止与应用程序相关的组件,例如 Activity、Service、Receiver 等。

2024-02-27 14:35:34 91

原创 Android PMS——PMS处理pm命令(九)

上一篇文章介绍到最后通过 IBinder::shellCommand 调用到 PMS 中的 onShellCommand 方法。这里我们就来分析一下 PMS 中的处理流程。

2024-02-26 10:10:30 313

原创 Android PMS——pm命令解析(八)

pm 为包管理(package manager)的简称,pm 命令是 Android 系统中的一个包管理工具命令,用于管理应用程序包。它可以执行各种操作,例如安装、卸载、启用、禁用应用程序以及查看应用程序详细信息。

2024-02-26 10:09:59 201

原创 Android PMS——ADB命令安装流程(七)

前面的文章我们介绍了系统应用解析流程和通过 PackageInstaller.apk安装应用程序的相关流程,这一篇我们来分析使用 ADB 命令来实现 APK 安装流程。

2024-02-02 09:43:23 549

原创 Android PMS——网络下载应用安装(六)

我们接着上一篇文章继续分析,文章最后调用到了 PackageManagerService 中的 installStage() 方法,这里就是正式开始 APK 的安装过程。

2024-02-02 09:11:34 255

页面跳转与数据回传

页面跳转与数据回传,跳转方法startActivityForResult的使用与返回数据的处理。

2015-02-16

Android控件的简单使用

Android控件简单使用,AoutCompleTextView、MultiAoutCompleTextView、ToggleButton、CheckBox、RadioGroup等控件

2015-02-16

通知Notification

这是一个Android中通知的简单使用源码,基本满足大多是用户的使用需求,其中的注释特别详细,适合初学者学习使用。

2015-01-28

布局优化Demo

布局界面中include、merge、ViewStub的使用实例。

2015-01-27

ScorollView简单使用

主要ScorollView简单使用方法,包括滑动监听、滑动加载、位置跳转等功能。适合初学者研究使用,注释非常详细。

2015-01-23

ViewFlipper简单使用

ViewFlipper实现图片轮播和图片滑动切换,原理和思路比较清晰,滑动切换效果不是很好,需要修改动画效果文件。

2015-01-21

ViewPager简单使用

主要介绍ViewPager的简单使用和三种Adapter的区别,适合初学者学习使用。

2015-01-21

Fragment使用

主要介绍Fragment的使用,包括动态加载、静态加载、生命周期、数据传递等,代码里注释比较详细,但代码中的结构和命名比较混乱,最好结合下面的问章看。http://blog.csdn.net/c19344881x/article/details/42876041

2015-01-20

进度条简单使用和自定义

进度条简单使用和自定义进度条显示风格,代码比较简单,注释详细,适合初学者。

2015-01-16

下拉列表使用

下拉列表的简单实用Demo,代码简单注释详细,适合初学者学习使用。

2015-01-16

日期时间选择

日期时间选择控件的使用,包括嵌入Activity中和弹出式两种情况,适合初学者,代码注释比较详细。

2015-01-16

广播使用Demo

主要包括三种类型的广播的简单实用及对比。

2015-01-14

ContentProvider测试Demo

ContentProvider的测试Demo,只有下载并运行http://download.csdn.net/detail/c19344881x/8360531下的应用才会看到效果。单独下载没有用处。

2015-01-14

ContentProvider使用

使用ContentProvider,实现应用程序的数据共享。

2015-01-14

添加查询联系人信息

实现手机联系人的添加和查询功能,没有积分的可以去http://blog.csdn.net/c19344881x/article/details/42679795,

2015-01-14

本地文件读写

主要实现本地文件的创建以及读写操作。没有积分的可以搜索《Android开发存储方式详解之本地文件读写实例》查看源码。

2015-01-13

自定义导航栏

代码中有详细的注释,功能比较简单,主要是学习使用,有积分的可以下载支持一下,如果实在没有积分可以查找我的《Android 自定义控件详解》这篇文章学习。

2015-01-09

WebView JS方法调用

在WebView页面上的按钮点击事件响应本地类中的方法。

2015-01-07

WebView文件下载

用于实现WebView页面中的文件下载功能。

2015-01-06

phonegap-2.9.1.zip

PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.

2014-11-24

HCI Log分析工具-CPAS-11

HCI Log分析工具-CPAS-11,使用参考:https://xiaoxu.blog.csdn.net/article/details/129261272

2024-04-17

Android Audio相关流程时序图

Android 11 Audio相关流程时序图,需要使用EA画图工具打开。包含Audio中音量获取/设置、焦点申请/放弃、属性设置等相关流程,从APP层到Hal层。 详细讲解相关文章参考:https://blog.csdn.net/c19344881x/category_12324194.html

2023-11-30

Android Radio相关流程时序图

Android 9.0 Radio相关流程时序图,需要使用EA画图工具打开。包含Radio暂停、播放、切换电台、获取电台信息、切换FM/AM、调频/调辐、搜索、取消搜索等相关流程,从APP层到Hal层。同时还包含类图等其他软件图。 详细讲解相关文章参考:https://blog.csdn.net/c19344881x/category_12312897.html

2023-09-01

Android 蓝牙开发相关知识总结

Android 蓝牙开发相关知识总结

2023-03-07

SurfaceFlinger学习笔记总结

SurfaceFlinger学习笔记总结

2023-03-07

MinGw 安装包,版本0.6.2

MinGw 安装包,版本0.6.2

2023-03-07

根据.h文件在自己的so库中调用三方so库

根据.h文件在自己的so库中调用三方so库

2023-01-06

Android Studio生成自己的so库

Android Studio生成自己的so库

2023-01-06

本地实现U盘扫描SDK部分代码

本地实现U盘扫描功能SDK,无法直接运行,需要自己编译成SDK在调用。 参考:https://blog.csdn.net/c19344881x/article/details/126161462

2022-10-28

开发调试所使用的各种格式音视频

视频格式:ts 264 avi wmv mkv mov rm 3gp flv gif mpg rmvb swf vob webm asf dat f4v h264_mp4 h265_mp4 音频格式:aac ac3 aiff amr au m4a mka mp2 ogg ra wav wma mp3

2022-07-20

jai-imageio和swingx.jar.zip

【图形处理相关的jar包】jai-imageio-1.1.jar和swingx-1.6.1.jar下载

2021-12-16

Android端Socket实现聊天功能

Android端Socket实现聊天功能,能够发送文字、图片、商品等信息,实现了消息本地存储。讲解:https://mp.csdn.net/mp_blog/creation/editor/120673184

2021-10-11

SocketDemo.zip

Android Socket通信简单实现源码下载:https://blog.csdn.net/c19344881x/article/details/120455491

2021-09-24

竖直滚动TextView

很简单的文本信息竖直滚动展示效果,没有积分的可以搜索“Android TextView竖直滚动文字广告效果”的博客。

2016-01-18

滚动选择控件

自定义日期滚动选择控件,代码使用方便,而且可以通过修改自定义Dialog中代码控制日期可选范围和添加时间选择功能等。

2015-08-25

断点续传下载

主要实现文件下载的暂停和继续下载功能。 用到的知识点: 1、Service的使用以及Service与Activity之间的数据交互; 2、SQLite数据库的简单使用; 3、文件下载与存储; 4、广播的简单使用。

2015-05-19

AsyncTask异步加载使用

AsyncTask异步加载使用Demo,详解可以参考《Android中AsyncTask的使用详解》,代码中的注释也比较详细,初学者可以参考。

2015-05-15

Android仿百度贴吧看帖滑动返回效果

实现百度贴吧看帖时的滑动返回效果和AutoCompleteTextView的使用。

2015-04-14

手势识别实现

文件中包含两种实现手势识别功能的工程,一种是使用GestureDetector实现手势识别,另一种是使用GestureOverlayView实现手势识别。

2015-02-26

Service使用

实现Service的启动、停止、绑定、解绑与Service中方法的调用。

2015-02-25

空空如也

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

TA关注的人

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