分类

Android

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

共 356 篇文章

startActivityForResult的替代方法:registerForActivityResult
Android

startActivityForResult的替代方法:registerForActivityResult

startActivityForResult的替代方法:registerForActivityResult在startActivityForResult的用法一文的最后提到startActivityForResult方法已经废弃,推荐使用AndroidX中的registerForActivityResult方法。将ActivityResultCallback注册到ActivityResultReg

2.7k
startActivityForResult的原理
Android

startActivityForResult的原理

startActivityForResult的原理在startActivityForResult的用法一文中简单回顾了启动Activity之间传递数据的方法,这样的设计方便了开发者。背后的原理其实很简单,如果熟悉Activity启动流程,不难发现,其实startActivityForResult就穿插在其中。本篇探索startActivityForResult的原理,顺便回顾一下Activity启

2.2k
Android

startActivityForResult的用法

startActivityForResult的用法startActivity(),应该是安卓开发初学者最先接触的一个方法。从一个Activity:A启动跳转到另一个Activity:B,借助启动的Intent能够携带一些参数,数据流向A->B:1、startActivityForResult方法通常还会有一些场景,启动完B,返回到A界面。需要返回结果,这时候就要用到startActivityFor

1.8k
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w
如何实现特殊日期界面灰色模式?
Android

如何实现特殊日期界面灰色模式?

如何实现特殊日期界面灰色模式?在特殊的日期为了缅怀和纪念,比如清明节等,淘宝、京东、拼多多等应用的首页自动切换成灰白主题的样式。先看看如何快速实现这个功能,服务端可以将图片灰度预处理,前端也能将界面呈现灰度。按照置灰作用区域分:局部View、单个Activity页面、整个应用。①局部View置灰:淘宝APP使用局部View灰色的方法,首页往下滑动出来的不再呈现灰白色。②单个Activity置灰:优

1.8k
Android 是如何查找最匹配的资源
Android

Android 是如何查找最匹配的资源

Android 是如何查找最匹配的资源Android开发中,应用需要适配各种大小的屏幕、设备(折叠屏、平板等)、国家语言、深色模式等。比起在代码里到处插桩、资源替换(切换主题就是采用这种方法)等繁琐的方式,最有效也是最简单的适配途径就是利用资源目录。这是最近几个月海量适配的经验总结,框架保证可靠性。1、资源目录限定符在资源目录名中添加限定符,Android会根据当前配置为APP选择合适的资源加载。

2.1k
getSystemService()引起的内存泄漏​
Android

getSystemService()引起的内存泄漏​

getSystemService()引起的内存泄漏通常获取系统服务通过Context的getSystemService(String name)方法,举个例子:每个系统服务都有独一无二的名称对应,其中CONNECTIVITY_SERVICE是定义在Context中的"connectivity":1、getSystemService方法getSystemService(String name)方法是

3.2k
AOSP代码在线搜索:Code Search
Android

AOSP代码在线搜索:Code Search

AOSP代码在线搜索:Code Search阅读源码的时候,一个痛点就是“迷失在茫茫目录中”:找不到类文件在哪、找不到接口的实现类是哪个、找不到方法在哪实现的。比如,看Display相关源码,会发现DisplayManagerGlobal中有一个成员IDisplayManager,对源码结构不熟悉的话,一时找不到这个接口实现在哪里。在Android源码目录结构一文中对AOSP的目录有些许的了解,知

3.1k
SurfaceFlinger启动流程
Android

SurfaceFlinger启动流程

SurfaceFlinger启动流程 好久没有看源码,恰好接触到SurfaceFlinger,简单了解一下SurfaceFlinger。SurfaceFlinger是一个系统服务,接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备进行显示。在Zygote进程的启动一文中,了解到:在系统启动时,init进程读取位于/android/platform/system/core/rootdi

3.0k
Android

View的setWillNotDraw()方法作用

View的setWillNotDraw()方法作用仅View一个类代码就超过3万行,从头到尾看一遍难度太大。除了记住常用的方法,还有一些不那么常用的。本篇将要介绍的是setWillNotDraw()方法。1、setWillNotDraw() 方法介绍如果调用View的setWillNotDraw(true)方法,也就是给View设置WILL_NOT_DRAW标志,会跳过当前View的绘制,对应Vi

3.0k
Android

ViewStub源码剖析

ViewStub源码剖析之前在ViewStub懒加载一文中记录了如何使用ViewStub懒加载布局,当时没有继续对ViewStub深入研究。现在回头看看ViewStub源码,只有三百多行,属实需要细细品一下。 nukc在看了ViewStub源码之后突发灵感,写了StateView库,吸收了ViewStub的一些特性,内存占用少。从ViewStub的构造函数开始看,ViewStub继承自View,所

1.8k
视图绑定:ViewBinding​
Android

视图绑定:ViewBinding​

视图绑定:ViewBinding安卓开发中让开发者厌烦的要数findViewById(),早些时候JakeWharton大神写的View注入框架ButterKnife很火,干掉重复的工作提高效率。不过现在不再维护,而且用的也越来越少。2020年3月Google官方推出了Android Studio3.6,亮点就是ViewBinding,来解决上面那个烦人的问题。ViewBinding也用了一年多,

3.8k
探究onAttachedToWindow和onDetachedFromWindow
Android

探究onAttachedToWindow和onDetachedFromWindow

探究onAttachedToWindow和onDetachedFromWindowProgressBar,是很多开发者一开始接触安卓开发就使用过的控件,用来显示加载进度。查看ProgressBar源码,在onAttachedToWindow()方法中开启进度条加载动画:在与之对应的onDetachedFromWindow()方法中停止动画:onAttachedToWindow()和onDetach

2.4k
View的invalidate()流程​
Android

View的invalidate()流程​

View的invalidate()流程自定义View的时候常用到invalidate()方法,为了刷新View以重新绘制。和requestLayout()不同的是,调用invalidate()后只会回调调用View的draw()方法;而调用requestLayout()则会从上到下重新测量、布局一遍。 应根据实际情况选择使用invalidate()还是requestLayout(),如果只需要刷新

2.5k
View的requestLayout()流程
Android

View的requestLayout()流程

View的requestLayout()流程requestLayout()常用来对View重新进行测量、布局和绘制。当View需要更新当前的布局时,就向父布局申请重新布局。虽然是ViewParent接口中定义的方法:但其完整实现却在View中,而不在ViewGroup类里(后面会讲到):在继续跟随源码剖析requestLayout()流程之前,先搞清楚View中的mParent从哪来?1、View

2.4k