分类

Android

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

共 356 篇文章

Android

AMS服务的启动

AMS服务的启动Android开发是不是经常听说过AMS,什么是AMS?其实指的就是ActivityManagerService和一些关联的类,对系统运行时的Activity进行管理。以Android Q的源码开始阅读,了解AMS的启动过程,会发现不再由ActivityManagerService,而是由重构之后ActivityTaskManagerService类来启动管理Activity。1、

2.4k
Android

如何获取全局Context?

如何获取全局Context?开发过程中经常会用到Context,但是如果不在Activity或者Service,比如在Presenter层有时就无法获取到Context,非常棘手。有办法!定义全局应用唯一的一个静态Application Context,虽然是静态的,但是生命周期和应用一样,不存在内存泄漏。1、自定义Application定义静态的Context变量,重写onCreate()方法,

1.7k
各种Context及其初始化流程
Android

各种Context及其初始化流程

各种Context及其初始化流程Context在Android开发中实在是太重要的,用到的地方数不胜数。开发过程中没有Context是万万不能的,给人感觉Context简直是“万能”的。因为总有一些地方会用到Context,可以通过传参的方式传入;但是有些又没法通过传参传入,这时候可以使用全局ApplicationContext的方式获取到一个Context(见《如何获取全局Context?》)。

2.5k
Android

Binder线程池的启动

Binder线程池的启动Binder线程池在Android是一个非常重要的技术,访问其它应用ContentProvider的,应用进程和系统服务之间的通信等操作在服务端是运行在Binder线程池中的。Binder线程池是一个比较底层的概念,关于Binder的代码在native层中:../frameworks/native/libs/binder接着APP进程的启动(见:APP进程启动流程),在Zy

2.3k
Android

APP进程启动流程

APP进程启动流程当用户点击桌面上的APP图标打开一个应用,这中间发生了什么?桌面通过Intent启动APP之后系统做了哪些?Android系统做了非常复杂的操作。从全局流程上简化来看,在上次分析的Zyoget进程的启动流程中,了解到通过AMS发送启动应用的请求,Zygote服务端接收到请求后,fork自己创建应用程序进程。1、启动APP点击桌面上的图标启动应用的时候和通过Intent启动Acti

2.6k
PopupMenu:弹出菜单
Android

PopupMenu:弹出菜单

PopupMenu:弹出菜单PopupMenu弹出菜单,在点击控件的位置附件弹出一个菜单给用户选择。根据所点View位置会自动适应调整弹出菜单的位置,比如下方空间不够,就会将菜单在View的上方弹出。1、定义Menu菜单文件可以代码定义,也可以在在src/main/res/menu/菜单文件夹下定义菜单xml文件。这里选择后者,方便。注意:菜单项必要有title标题关于<menu />标签的语法详

2.0k
Android

Launcher加载APP图标流程

Launcher加载APP图标流程前段时间看了桌面Launcher的启动流程《安卓桌面Launcher的启动》,但是还没完,桌面也是一个安卓应用且涉及到的面很广,光是桌面这个模块就需要一个团队维护开发。AOSP Launcher源码:Launcher3大牛维护的Launcher代码:fookwood/Launcher31、Launcher.onCreate()接着Launcher的启动,通过Int

2.7k
监听应用的安装、卸载及更新
Android

监听应用的安装、卸载及更新

监听应用的安装、卸载及更新Android的系统没有孤立的应用,一个完全与手机上其它应用毫无关系的应用很少(比如:计算器)。得益于Android应用生态圈的建设:阿里系的APP、头条系的APP等都会相互之间通过DeepLink、ContentProvider、Intent等进行关联互动。一旦有关联就需有变数,比如手机上安装应用A,功能依赖应用B,现在B被卸载了,A需要知道。当B被重新安装上,A需要及

1.9k
Android

Android桌面Launcher3的启动

Android桌面Launcher3的启动SystemServer启动会在startBootstrapServices()方法中启动引导带服务,其中就包括PackageManagerService(这里判断了手机是否是工厂模式)。而包管理服务和接下来要分析的Launcher启动有很大关系。SystemServer启动流程参考《SystemServer系统服务启动》。startOtherServic

3.0k
监听系统语言变化
Android

监听系统语言变化

监听系统语言变化监听系统语言变化,有两种方法:一种通过onConfigurationChanged回调,另一种监听系统语言变化相关的广播。1、configChanges在AndroidManifest.xml文件中,对应的Activity节点下添加配置android:configChanges。关于Configure参考《onConfigurationChanged()及屏幕横竖屏锁定》注意只添加

1.9k
Android

Android 获取内存信息全攻略:堆内存、系统内存与进程内存

Android 获取内存信息全攻略:堆内存、系统内存与进程内存内存优化始终是 Android 性能工程的重头戏,而"优化"的前提是"量得到"。但不少同学照着网上的代码一抄,发现拿到的内存值要么只涨不跌、与 Android Studio Profiler 对不上,要么数字大得离谱——根源在于 Android 的"内存"有好几套口径:Java 堆、系统可用内存、进程 PSS、设备物理内存,各自 API

200
联系人数据读取
Android

联系人数据读取

联系人数据读取之前介绍了Android短信的操作(短信操作:原来用户隐私这么容易暴露)。这回来看看联系人数据的获取,首先需要申请读取联系人的权限:1、ContactsProvider联系人相关的内容提供程序在/packages/providers/ContactsProvider中。/packages/providers/还有其它类型(比如:短信、多媒体等)的内容提供器。1.1、ContactsP

1.6k
FloatingActionButton:悬浮按钮
Android

FloatingActionButton:悬浮按钮

FloatingActionButton:悬浮按钮FloatingActionButton(悬浮按钮)从Android 5.0之后随着Material Design加入Android控件家族。其实就是ImageView,继承关系如下: java.lang.Object ↳ android.view.View ↳ android.widget.ImageView ↳ android.widget.I

1.9k
Android

Android TextInputLayout 详解

Android TextInputLayout 详解1、TextInputLayout 概述TextInputLayout 是 Android Material Design 组件库中的重要控件,它继承自 LinearLayout,用于包装 EditText(或其子类如 TextInputEditText),提供更加丰富的输入体验。TextInputLayout 能够实现浮动标签、错误提示、字符计

173
Spinner:下拉选择
Android

Spinner:下拉选择

Spinner:下拉选择简单介绍一个Android中的下拉选择控件:Spinner,别看它小巧,用处靠发挥开发者的创造力,比如搜索输入框中不断更新的提示词可以用Spinner。源码路径:frameworks/base/core/java/android/widget/Spinner.java1、Spinner在布局中添加Spinner2、Spinner数据下拉选择得有选项,这些数据有多种方式添加到

1.6k