分类

Android

深入探讨 Android 系统的核心架构与高级开发,聚焦四大组件(Activity、Service、Broadcast Receiver、Content Provider)的原理、生命周期管理和交互机制。从基础的组件构建与通信,到 Android Framework 层(如 AMS、WMS、PMS)的源码剖析和自定义扩展,提供详尽代码示例、调试技巧和性能优化策略。涵盖 JNI、AIDL、Binde

共 356 篇文章

MediaStore:安卓多媒体数据库
Android

MediaStore:安卓多媒体数据库

MediaStore:安卓多媒体数据库MediaStore是Android系统提供的媒体数据库信息类。封装了文件、视频、音频、图片、下载的信息,可以用Uri通过ContentProvider方便的查询系统中的这些媒体信息。MediaProvider负责处理这些查询请求,内部维护SQLite数据库。在系统/packages/providers/目录下,系统中有许多类似的Provider,比如之前介绍

1.8k
SystemServer系统服务启动
Android

SystemServer系统服务启动

SystemServer系统服务启动SystemServer进程用来在创建系统服务,比如AMS、WMS、PMS等。熟悉一下Android系统服务的启动流程。总的启动时序图如下:接着《Zyoget进程的启动》,同样在ZygoteInit的main方法中:调用Runnable forkSystemServer(String abiList, String socketName,ZygoteServer

1.8k
ContextMenu:上下文菜单
Android

ContextMenu:上下文菜单

ContextMenu:上下文菜单在Activity中长按某个View会弹出一个菜单,类似Windows上右键弹出的菜单。在Activity中只需要实现已有的几个空方法即可自定义上下文菜单:onCreateContextMenu、onContextItemSelected、onContextMenuClosed。不同的手机系统,显示样式和特性稍有差异。1、ContextMenu传统Menu的上下文

1.8k
创建桌面快捷方式
Android

创建桌面快捷方式

创建桌面快捷方式创建桌面快捷方式,方便用户直达页面。比如微信的联系人快捷方式,点击直接进入聊天界面,省去很多步骤。Android API升级过程中也对创建桌面快捷方式的方式进行了改进。有两种创建桌面快捷方式的途径,详见第二和第三节,开发中要做好兼容,这就是安卓最麻烦的地方。1、所需权限创建桌面快捷方式也需要声明权限,不然不能正确在桌面创建快捷方式。2、Android N之前创建快捷方式(废弃)An

2.8k
Android

Android GPS 定位详解:权限、双 API 与坐标系转换

Android GPS 定位详解:权限、双 API 与坐标系转换定位是地图、出行、运动、天气类 App 的基础能力。Android 提供了两套定位 API——原生 LocationManager(基于 GPS/网络等硬件 Provider)与 Google 的 FusedLocationProviderClient(融合定位,更省电、更精准),再叠加运行时权限、国内坐标系偏移等坑,初学者很容易踩雷

188
Android

Zygote进程的启动

Zygote进程的启动Android系统中有三个关键进程:init进程、SystemServer进程和Zygote进程。Zygote是系统运行的第一个Dalvik虚拟机进程,且负责孵化开启其它的APP应用进程。Zygote进程是由Linux内核启动的用户级init进程启动,现在就来了解一下Zygote进程的启动流程。至于Linux进程0、内核进程是如何启动的这里不深入讨论,参考计算机专业的书籍《L

2.2k
短信操作:原来用户隐私这么容易暴露
Android

短信操作:原来用户隐私这么容易暴露

短信操作:原来用户隐私这么容易暴露Android电话通讯讯息管理相关的模块是Telephony。其源码在../frameworks/base/telephony路径中,目录结构如下。1、短信模块手机应用很多都会有短信读取识别功能,主要就是通过短信模块提供的TelephonyProvider对短信进行查询等操作,由系统维护的Provider,位于系统/packages/providers/目录下,诸

1.9k
Android

Android中的各种目录

Android中的各种目录Android开发中涉及到很多存储的知识,比如会读取各种目录下的文件,将文件写到指定的目录下。这时候就要对Android的目录结构和系统提供的目录相关的属性和API有所熟悉。与目录相关的方法在Context和Environment类中。1、Context获取目录Context上下文提供了一些方法,获取不同的目录。接下来一一介绍这些方法。1.1、getFileStreamP

3.4k
Android

BroadcastReceiver:广播的使用

BroadcastReceiver:广播的使用广播是Android四大组件之一。用广播可以实现简单进程间通信;一定程度上还能解耦;关于BroadcastReceiver的原理参考BroadcastReceiver工作流程。广播除了用来通知,桌面小部件AppWidgetProvider也是继承自BroadcastReceiver实现更新桌面挂件的,参考AppWidgetProvider:桌面小挂件。

1.9k
Android

multiDex:分包

multiDex:分包开发的APP功能越来越多,引入的库也越来越多,很容易达到“界限”65536,因为Android中一个Dex文件最多存储65536个方法(short类型的范围)。这时候就要开启“分包”multiDex。1、Android 5.0之后分包Android 5.0也就是API 21之后ART虚拟机支持MultiDex。直接在build.gradle文件中直接配置multiDexEna

1.7k
Android

Bitmap加载选项:BitmapFactory.Options

Bitmap加载选项:BitmapFactory.Options1、BitmapFactory.OptionsBitmapFactory.Options是BitmapFactory加载Bitmap用到的选项配置,用于解码Bitmap的时设置各种参数选项。BitmapFactory的使用参考BitmapFactory详解。2、重要属性BitmapFactory.Options类有很多public成员

1.8k
Android

HandlerThread源码的实现

HandlerThread源码的实现HandlerThread继承自Thread,和普通线程一样,只不过HandlerThread有自己的Looper,线程启动之后可以用HandlerThread中的Looper创建Handler,向Handler发送消息,将任务放到线程中执行。比如熟悉的IntentService,内部就是借助HandlerThread在子线程中执行onHandleIntent(

1.7k
IntentService原理
Android

IntentService原理

IntentService原理之前记录了一篇IntentService 的使用(参考IntentService使用详解),没有详细对IntentService的实现原理进行深入颇析。正好阅读Android源码,对一些实现原理进行深入的了解。先介绍一下IntentService中两个重要的成员变量:mServiceLooper和mServiceHandler。在IntentService初始化的时候

1.7k
Android

源码颇析AsyncTask工作原理

源码颇析AsyncTask工作原理Android开发中经常会用到AsyncTask开启异步任务,后台执行耗时操作,具体用法参考《AsyncTask:异步任务》。现在从源码来看看AsyncTask的实现机制。1、AsyncTask中的线程池AsyncTask中封装了两种Executor,一个是顺序执行的SERIAL_EXECUTOR,另一个是并发执行的THREAD_POOL_EXECUTOR。1.1

1.8k
Android

Thread和ThreadLocal

Thread和ThreadLocal Handler获取当前线程的 Looper 对象,而每一个线程的 Looper 是不一样。每一个线程都有一个 Looper 对象,使用 ThradLocal 去保存和获取当前线程的 Looper 是最佳的选择。Android中Handler、Looper消息机制得益于巧妙的运用了ThreadLocal的特性,关于Handler机制参考Handler、Loope

1.9k