Android 学习笔记
文章平均质量分 62
刘之帅
日拱一卒无有尽,功不唐捐终入海。
展开
-
Android Studio 阅读 frameworks/base 下的代码
这之后 frameworks/base/core 下面的代码就可以相互跳转了,但是 AIDL 接口类型因为未编译过所以无法识别,这是一个小小的缺点,只能通过全局搜索来解决。frameworks/base/services/core 依赖 frameworks/base/core,Module SDK 最好选择 JAVA 的 SDK。同样的操作,可以把 frameworks/base/services/core 也添加进来,然后再配一下依赖。在下面的窗口中,只选择 java 就够用。原创 2023-01-16 18:39:19 · 1325 阅读 · 0 评论 -
使用 AIDL 注册回调,在 Service 侧收到的回调是 null
若参数为 AIDL 接口对象,则会生成类似如注释 1 处的代码,检测到 param 不为空后,会调用 param 的 asBinder 方法生成一个 IBinder 对象,然后通过 Binder 将该 IBinder 对象发送给 Service。Client 通过 AIDL 接口注册了一个回调,其中回调也是 AIDL 接口,注册时该回调对象不为 NULL,但是 Service 接收到该回调对象时却为 null。原创 2022-11-21 21:02:57 · 921 阅读 · 0 评论 -
开发 AppWidget
参考 https://www.cnblogs.com/joy99/p/6346829.html。原创 2022-11-21 20:58:46 · 768 阅读 · 0 评论 -
全屏的实现(隐藏 StatusBar 或 NavigationBar)
所以,View.SYSTEM_UI_FLAG_IMMERSIVE 都是配合View.SYSTEM_UI_FLAG_FULLSCREEN 和 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 一起使用的。要启用粘性沉浸模式,请调用 setSystemUiVisibility() 并将 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 标志与 SYSTEM_UI_FLAG_FULLSCREEN 和 SYSTEM_UI_FLAG_HIDE_NAVIGATION 一起传递。原创 2022-11-21 20:54:49 · 4087 阅读 · 0 评论 -
Window 添加与更新流程
在注释 1 处,mWindowSession 是 IWindowSession 类型的字段,所以这里调用的是 IWindowSession::relayout 方法,IWindowSession 对应服务端的 com.android.server.wm.Session, 一个 ViewRootImpl 对应一个 Session,ViewRootImpl 与 WMS 的交互都要经由 Session 转发。显然 mChildren 在这里是 DisplayContent 类型的数组,即注释 2 处调用了。原创 2022-11-21 20:48:40 · 968 阅读 · 0 评论 -
WindowInsets 分发 & WindowInsets 相关类
ViewRootImpl 在 performTraversals 时会调用 dispatchApplyInsets 方法ViewRootImpl::dispatchApplyInsets 定义如下注释 1 处的 host,其实就是在调用 ViewRootImpl::setView 时传递进来的 View 对象,通常来说,是一个 ViewGroup 对象ViewGroup::dispatchApplyWindowInsets注释 1 处先执行 View 的 dispatchApplyWindowIns原创 2022-11-18 17:55:29 · 1511 阅读 · 0 评论 -
Android 9 画中画实现流程
注释 1 创建画中画模式的 stack,注释 2 将 Activity 的 Task 放到新建的画中画 stack 中,注释 3 执行变化动画,注释 4 用来显示该 task。进入画中画模式后,新的 activity 样式定义在 DecorView.java,当该 Window 进入画中画后。注释 1 创建了一个 Runnable ,该 Runnable 会在注释 3 被执行,其中核心代码是注释 2。注释 1 给 DecorView 设置了一个外轮廓,外轮廓定义如下。原创 2022-11-18 17:33:33 · 856 阅读 · 0 评论 -
Android 内存溢出、垃圾回收、四种引用
其实现原理为:使用 WeakReference 当作key来进行数据的存储,当 key 中的引用被回收掉之后,该 WeakReference 会被添加到 ReferenceQueue 中,当使用 WeakHashMap 时,WeakHashMap 会将 检索 ReferenceQueue 中的 key 对象,如果某一个 key 存在于 ReferenceQueue 则将其与对应的 value 一并删除。内存抖动:内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,主要是循环中大量创建、回收对象。原创 2022-10-19 09:39:00 · 1012 阅读 · 0 评论 -
Android MVVM LiveData postValue 吞消息
可以看到 mPostValueRunnable 本质是 NamelessClass_1 对象,在其 run 方法中,会读取 mPendingData 的值,然后通过调用 setValue 方法使其通知 Observer 对象。该问题可能发生在同线程也可能发生在不同线程之间,根本原因是,postValue 方法和实际执行通知 Observer 的操作之间存在时间差,这个是 Handler 的机制所导致的。连续调用多次 LiveData 的 postValue 方法,结果只有最后一次响应,前面的消息都被吞了。原创 2022-10-19 09:32:32 · 921 阅读 · 0 评论 -
Quick Settings 中 Tile 的加载
由上述代码可知,Quick Settings 对应 StatusBar::createDefaultQSFragment 方法创建的 Fragment,并被放置 mNotificationShadeWindowView 中的 R.id.qs_frame 下。从 QSFragment::onCreateView 方法可知,对应的布局文件为 R.layout.qs_panel。在 R.layout.qs_panel 中,掌管 Tile 显示的部分是 QSPanel,在布局文件中定义如下。原创 2022-10-19 09:29:39 · 465 阅读 · 0 评论 -
图案解锁流程
后续与 PIN 码解锁一样。原创 2022-10-19 09:26:22 · 539 阅读 · 0 评论 -
使用指纹的锁屏解锁流程
首次调用该函数时因为 mHideAnimationRun 仍然为 false,所以走了下面的分支,首先在注释 1 处,将 mHideAnimationRun 置为 true,然后在注释 2 处开始执行播放解锁前的 hide 动画,动画播放结束后,将调用 mHideAnimationFinishedRunnable 回调。注释 1 的判断语句不成立,所以走 else 流程,调用注释 2 处的代码移除 bouncer view。此时由于锁屏界面还未消失,所以注释 1 的判断成立,走了注释 2 的逻辑。原创 2022-10-19 09:24:32 · 1460 阅读 · 1 评论 -
密码解锁流程
【代码】密码解锁流程。原创 2022-10-19 09:20:17 · 354 阅读 · 0 评论 -
滑动解锁流程
后续与pin码解锁流程相同。原创 2022-10-18 16:42:19 · 702 阅读 · 0 评论 -
PIN 码解锁流程
【代码】PIN 码解锁流程。原创 2022-10-18 16:40:05 · 471 阅读 · 0 评论 -
KeyguardService 类间关系
有很多像 KeyguardStatusViewController 这样的类都持有 KeyguardStateController 的引用,他们可以通过 KeyguardStateController 主动获取、更新当前 Keyguard 的状态,也可以通过注册 callback 被动接收状态改变的通知。KeyguardUpdateMonitor 用于监听 keyguard 可能感兴趣的更新,并提供注册回调的方法,其内部持有。原创 2022-10-18 16:37:06 · 814 阅读 · 0 评论 -
Keyguard 视图结构
【代码】Keyguard 视图结构。原创 2022-10-18 16:32:51 · 245 阅读 · 0 评论 -
Android S 不受信任触摸事件
在搭载 Android 12 或更高版本的设备上,不受信任的触摸功能默认被屏蔽。检测不受信任的触摸操作是否被屏蔽。原创 2022-10-18 16:30:52 · 4139 阅读 · 2 评论 -
Android Dock
Android Dock原创 2022-10-18 16:27:28 · 695 阅读 · 0 评论 -
Android Doze
Android Doze原创 2022-10-18 16:26:36 · 951 阅读 · 0 评论 -
Android Activity绑定Service工具类 含自动重连功能 记录备用
ServiceBindHelperimport android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Handler;import android.os.IBinder;import android.os.Message;import android原创 2021-08-28 14:25:44 · 416 阅读 · 0 评论 -
Android Framework 客户端 ViewRootImpl 到 View 的事件分发过程
#mermaid-svg-1WVJIbTGSiZqiesM .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-1WVJIbTGSiZqiesM .label text{fill:#333}#mermaid-svg-1WVJIbTGSiZqiesM .node rect,#mermaid-svg-1WVJIbTGSi原创 2021-08-17 18:07:04 · 581 阅读 · 0 评论 -
Android 动态添加 View 学习笔记
加载布局文件LayoutParamsaddView原创 2021-05-31 22:21:46 · 1799 阅读 · 3 评论 -
Android 中 Window 机制与 Window 抽象类 学习笔记
源码分析原创 2021-05-30 17:36:19 · 231 阅读 · 1 评论