自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Android 11 触控事件处理机制

用户手指点击按压屏幕后,屏幕触控驱动产生中断,Linux内核会将硬件产生的触控事件包装成Event放在设备的dev/input/目录下。如何从设备上读取触控事件?读取到触控事件后该如何派发事件?派发事件时如何找到接收事件的目标应用窗口?找到目标应用窗口后如何将事件传递到目标窗口?目标应用窗口内部中的事件如何处理?下面将结合最新Android 11系统源码,通过分析回答这些问题来了解Android系统触控事件处理机制的全貌。

2024-07-25 14:30:14 963

原创 ActivityThread中的handleLaunchActivity什么时候执行

决定启动Activity时,它会通过IPC(Inter-Process Communication)调用目标应用程序进程中的。: 当一个Activity需要被启动时,通常是因为用户点击了一个应用图标或是在一个应用中选择了某个选项。总的来说,当Activity启动的意图被系统接收并处理后,包含了Activity的各种信息,如组件名称、启动模式、任务栈信息等。方法中,根据消息的类型,它会调用相应的处理方法。中被调用,以完成Activity的创建和初始化过程。在Android的Activity启动流程中,

2024-07-23 17:05:11 378

原创 Android Vold挂载的时序图

2.Disk中的Create方法会先通过binder方式调用onDiskCreated(getId(), mFlags)通知framework层的StorageManagerService,告诉其创建了Disk;4.StorageManagerService收到创建volume完成的消息后,会通过binder的方式回调mount的方法,这里首先会回调Binder服务端VoldNativeService中的mount方法,然后再调用VolumeBase中的mount方法。

2024-07-23 11:29:48 280

原创 Android 11 Unable to start/bind service

今天在Android11上发现了一个的问题,如果目标Service的进程没有启动,那么无论是bindService还是startService都没有办法拉起指定的Service。上面的包可见性问题不仅Service有这个问题,Activity也有这么问题哈,记录一下,避免有朋友也遇到同样的问题。上面的方法都试过了**然并卵**,还是报Unable to start service Intent.配置完了,赶紧拿起手机试了试,重启手机~bind目标service,终于bind成功了~//....代码省略。

2024-07-22 16:22:52 452

原创 android Surface.java中mNativeObject的作用

在Android的Surface类中,是一个长整型变量(long),它实际上是一个本地指针,用于在Java层和Native层之间桥接。存储了一个指向Native层Surface对象的引用,这个Native层的对象封装了与硬件和服务交互的所有细节。

2024-07-17 11:43:17 380

原创 android的parcel序列化的逻辑

Parcel,翻译过来是“打包”的意思。打包干什么呢?是为了序列化。如果要在进程之间传递一个整数,很简单,直接传就是行了;如果要传一个字符串,就稍微复杂了点:需先分配一块可以容纳字符串的内存,然后将字符串复制到内存中,再传递(新手可能问:为啥不直接把字符串的引用传过去呢?学过C/C++的地球人都知道:进程有自己的内存地址空间,一个进程中的1000地址可能在另一个进程中是100000,java对象的引用跟本上还是内存地址);再如果要传递一个类的实例呢?也是先为类分配内存,然后复制一份再传递可以吗?

2024-07-09 19:44:18 722

原创 android的Service的两种启动方式

在Android中,Service有两种主要的启动方式:通过和。这两种方式各有其用途和生命周期特性,下面将详细介绍每种方式及其应用场景。

2024-07-09 19:35:58 199

原创 android App中注册的receiver限制了1000个,是指App进程中所有receiver还是针对同一个Action的还是1000

如果一个应用注册了过多的广播接收器,它可能会导致其他应用或系统服务的性能下降。在Android中,限制注册的1000个广播接收器(Broadcast Receivers)指的是单个应用程序进程内的所有广播接收器的总数,而不仅仅是针对同一Action的数量。总之,这个限制是针对单个应用进程内的所有广播接收器,而不是特定Action的限制,因此开发者需要合理规划和管理应用中广播接收器的使用,避免不必要的资源消耗。方法),还是在AndroidManifest.xml中静态声明的,它们都会被计入该限制内。

2024-07-08 11:47:38 200

原创 android中ViewRootImpl与mSurface之间的关系

在Android的UI框架中,和Surface之间的关系非常紧密,因为它们共同参与了从视图绘制到屏幕显示的整个过程。

2024-07-05 15:38:49 255

原创 android中window和SurfaceView各自都对应一个surface吗

使用“双缓冲”机制来达到高效的界面刷新效果,即在后台缓冲区完成绘制后,才将内容交换到前台显示,避免了屏幕闪烁问题。可以独立于主线程执行复杂的图形操作,例如视频播放或者游戏画面的渲染,而不会阻塞UI线程,从而保证了UI的流畅性。则是Android框架中的一个更高层次的概念,它代表了应用程序的可视化容器,可以包含多个。通过创建一个置于应用窗口之后的新窗口,与宿主窗口分离,它可以在单独的线程中处理业务,不受。的属性控制,无法进行平移缩放等转换,因为它的主要目标是高效的图形渲染。来绘制内容,而是使用自己的。

2024-07-05 11:20:37 193

原创 Android中焦点的处理流程

在Android中,焦点处理流程通常指的是键盘输入焦点(也称为IME焦点)和视图焦点的变化流程。焦点的概念在UI设计中很重要,因为它决定了用户输入(例如,按键输入)会被哪个视图接收。在实际应用中,开发者可以通过覆盖上述提到的方法来实现特定的焦点行为,比如定制焦点移动逻辑或响应焦点变化事件。

2024-07-04 17:44:16 325

原创 android中ViewRootImpl和window和Surface的对应关系

是紧密相关的组件,它们协同工作来呈现用户界面。这三个组件共同构成了Android UI渲染的基础架构。则是两者之间的协调者,它接收来自。在Android的UI架构中,是UI的实际渲染目标,而。层次结构的内容映射到。

2024-07-04 17:43:29 289

原创 android的Surface.java的mNativeObject的作用是什么

的值通常是在Java层通过JNI(Java Native Interface)调用Native层代码时生成的。类型的成员变量,它实际上是一个指向Native层的句柄(handle)。是Java层和Native层之间沟通的桥梁,它使得Java层能够控制和访问Native层的。代表一个显示的内容,可以是应用程序的窗口、壁纸、系统UI元素等。对象不再被使用时,应该通过JNI调用Native层的函数来释放与。的管理非常重要,因为它涉及到资源的创建和销毁。对象被创建时,它会关联到一个Native层的。

2024-07-04 16:09:05 390

原创 android中的iwindow和phoneWindow有啥关系

在Android中,IWindow和是窗口管理中的两个重要概念,它们各自扮演着不同的角色,但又紧密相关。

2024-07-04 11:07:36 254

原创 android App的adj的大小及范围

值的范围理论上可以从非常低的负数到正数(如-1000到1000),但实际上大多数常见的进程状态会落在上述提到的范围内。(OomAdj,即Out-of-Memory Adjustment)值是用来表示进程在系统内存管理中的相对重要性,决定系统在内存紧张时哪些进程应该被优先终止。: 这个范围通常是从约900至1000,表示最近使用过的但当前不活跃的缓存进程,最容易被系统回收。: 表示那些可以被系统随时回收以释放内存的缓存进程,这个范围内的值表示不同的缓存进程优先级。在Android系统中,

2024-07-02 10:41:56 425

原创 View的onDetachedFromWindow什么时候被回调

由于这是View与Window解除关联的信号,所以在。:当一个View或者包含该View的ViewGroup被从Window中移除,无论是因为视图层次结构的变化,还是Activity的销毁,:如果View是Fragment的一部分,并且Fragment被移除或替换,那么该View也会脱离Window,触发此方法。:在某些内存管理操作中,如当系统需要回收资源以释放内存时,可能会导致View被移除并触发此回调。导致销毁时,该Activity中的所有View将从Window中分离,从而触发各自的。

2024-07-01 17:44:05 121

原创 View.AttachInfo起什么作用

包括与View关联的Window的句柄、显示信息(如尺寸、密度)、输入通道(InputChannel)等,这些用于控制View的绘制环境和处理用户输入。是确保View能够正确、高效地与其宿主Window交互的基础,涉及从布局、绘制到事件处理的各个方面。在Android系统中扮演着关键角色,它是连接View与Window的重要桥梁。:例如绘制边界、背景绘制信息、动画控制器等,对于View的绘制流程至关重要。:用于通知View关于其状态变化的信息,比如窗口焦点的变化。),确保操作在合适的线程循环中执行。

2024-07-01 17:43:05 277

原创 android View中的onTouchEvent如何区分点击和滑动事件

方法中根据用户的触摸行为区分点击和滑动,并相应地处理这两种交互。请注意,实际应用中可能需要根据具体需求调整阈值和处理逻辑。方法可以区分点击(tap)和滑动(swipe)事件。事件中,计算触碰点的新位置与原始位置之间的距离。如果这个距离超过了预设的阈值(通常使用。获取),则认为是滑动开始。这时,可以设置一个标志(如。事件中,根据之前设置的标志来判断是点击还是滑动结束。在Android的View中,通过重写。)来标记当前正在进行滑动操作。事件时,记录下触碰点的坐标()以及触碰时间(通过。这段代码展示了如何在。

2024-06-27 17:28:13 264

原创 android View中onTouchEvent如何判断点击和滑动事件

方法是处理触摸事件的主要入口点,它允许View对用户的触摸行为做出响应,包括点击和滑动。为了区分点击和滑动事件,你需要在。对象来判断用户的操作意图。用于确定滑动开始前允许的最小移动距离,避免因轻微的手指移动误判为滑动,而。中根据是否发生了滑动来决定是处理点击还是滑动结束的逻辑。则是判断点击的最短时间,防止快速滑动被误认为点击。在Android中,来检测是否有足够的位移来判断为滑动,并在。在这个示例中,我们使用了。来记录触摸点的初始位置和时间,

2024-06-27 17:25:00 169

原创 android的AMS的providerMap中为什么用name和class两种key

两种键是为了兼顾查询效率、管理灵活性以及系统内部处理的需要,确保ContentProvider能够被准确、高效地管理和访问。是用来存储已发布的ContentProvider实例的一个重要数据结构。这个数据结构之所以使用两种类型的键(在Android的ActivityManagerService (AMS) 中,综上所述,AMS中的。

2024-06-25 19:26:31 148

原创 android processRecord 分析

是Android系统管理进程的核心数据结构,它不仅存储着进程的身份信息、状态、优先级等关键数据,还是AMS实施进程生命周期管理、资源调度和错误处理的基石。通过深入理解,开发者可以更好地把握Android系统如何高效、安全地管理应用程序进程。

2024-06-25 19:24:58 319

原创 android handler.sendMessage中msg的理解

等字段)从一个线程安全地传递到另一个线程。这是Android中实现线程间通信的重要方式之一。中扮演着携带并传递数据的关键角色,是实现Android应用中线程间通信的核心组件之一。通常与创建它的线程绑定,特别是与主线程(UI线程)相关的。是一个封装了信息的数据结构,它允许你携带数据(通过。,用于更新UI或执行其他只能在主线程进行的操作。: 当消息到达消息队列的前端并且准备处理时,与该。则发送一个不包含数据对象(obj为空)的消息。,实现了在不同线程间安全地传递和处理消息。则是在指定的延迟时间后发送。

2024-06-25 19:23:54 127

原创 CopyOnWriteArrayList实现线程安全的原理分析

是Java并发包中的一个线程安全的集合类,它通过“写时复制”(Copy-On-Write, COW)策略来实现线程安全,尤其适用于读操作远多于写操作的场景。

2024-06-25 19:19:42 361

原创 IIntentReceiver的注册和接收流程

的注册和接收流程主要涉及以下几个关键步骤,这里以动态注册。

2024-06-22 14:33:57 388

原创 Binder的stub和proxy解析 及asBinder

在Android的Binder机制中,Stub和Proxy是实现跨进程通信(IPC)的两个重要概念,它们共同协作以透明化地在不同进程间调用方法。此外,asBinder方法也是Binder机制中的一个关键部分,用于获取Binder对象本身。

2024-06-22 11:09:14 257

原创 android IntentReceiver$Stub$Proxy的说明

是Android系统用于实现跨进程BroadcastReceiver调用的代理类,它基于Binder机制工作,确保了广播可以在不同应用进程之间安全、高效地传递和处理。

2024-06-22 11:07:04 301

原创 android 中IIntentReceiver如何将Broadcast发生给对应进程的

整个过程确保了即使BroadcastReceiver在不同的进程中,也能正确无误地接收到广播消息,体现了Android系统强大的跨进程通信能力。接口是系统用于在不同进程间传递广播的一个重要组件。在Android中,

2024-06-22 10:44:38 264

原创 android 中IIntentReceiver的作用

是一个Binder接口,它扮演着非常重要的角色,尤其是在处理广播(Broadcast)相关的跨进程通信(IPC,Inter-Process Communication)时。其核心作用在于桥接不同进程间的通信,使得一个进程能够接收到来自其他进程(如系统服务或其他应用)的广播意图(Intent)。是Android系统用来管理和协调跨进程广播接收的核心组件,它保证了广播能够在多进程环境中可靠且安全地分发和处理。也参与到权限检查的过程中,确保只有具备相应权限的应用才能接收到特定的广播,增强了系统的安全性。

2024-06-22 10:42:29 312

原创 BroadcastRecord的作用

对象包含了广播的所有相关信息,比如Intent对象(包含Action、Data、Category等)、发送广播的权限、目标接收者列表(包括静态注册和动态注册的BroadcastReceiver)、广播的类型(有序或无序)、以及与广播相关的标志位等。还用于跟踪广播的处理状态,例如当前正在处理的接收者、已经完成处理的接收者列表,以及广播是否已经完成或被abort等状态信息。是Android系统中广播分发机制的内部实现细节之一,对于确保广播的高效、安全、有序分发至关重要。:通过维护关于广播的信息和状态,

2024-06-22 10:39:20 174

原创 Android两种杀掉进程方式总结(System.exit()和Process.killProcess())

Android两种杀掉进程方式总结(System.exit()和Process.killProcess())

2024-06-18 11:01:57 346

原创 DisplayContent介绍

DisplayContent 用于管理屏幕,一块DisplayContent 对象实例代表一个屏幕设备,这样有多个屏幕的设备就可以创建多个DisplayContent 对象,虽然多数设备只有一个显示屏,但它们同样可以创建多个 DisplayContent 对象,如投屏的时候,可以创建一个虚拟的DisplayContent。

2024-06-18 10:52:07 195

原创 解析Activity执行onStop()接着执行onDestory()原因

下面主要看看mAlwaysFinishActivities在什么情况下,设置为true,发现是通过如下函数设置的,这是个AIDL接口是由APP来设置的。语音App的界面切换到后台后执行完onStop(),紧接着执行onDestory().正常情况下,应该只执行onStop,不执行onDestory。最后发现在开发者选项,应用模块中,第一项“不保留活动”打开后,就会出现用户离开后即销毁每个活动,App切换到后台回调onDestory方法。

2024-06-18 10:46:04 172

原创 从Window的角度看待Activity的启动过程

2.在目标进程中,执行ActivityThread.handleLaunchActivity方法,会回调目标Activity的onCreate方法,同时初始化一些与Window相关的对象或服务端的Binder引用,然后通过setContentView方法创建一个DecorView对象;3.在目标进程中,执行ActivityThread.handleResumeActivity方法,会回调目标Activity的onResume方法,然后调用目标Activity的makeVisible方法;

2024-06-18 10:43:43 294

原创 dvm_lock_sample解析

说明:system_server: Binder_9,执行到ActivityManagerService.java的6403行代码,一直在等待AMS锁, "-"代表持锁的是同一个文件,dvm_lock_sample:当某个线程等待lock的时间blocked超过阈值(比如:500ms),则输出当前的持锁状态.(进程名,是否主线程1是0否,线程号,花费时间,文件名,申请锁行数,持锁文件名,持锁行数,采样频率)即该锁被同一文件的1448行代码所持有, 从而导致Binder_9线程被阻塞1500ms.

2024-06-18 10:30:19 340

原创 安卓SystemServer重启多次进入RescueParty模式

rescueParty主要是为了处理当系统无法正常进入系统,当systemserver一直重启 或者 persistent app(守护应用)一直挂掉重启 时,当重启的次数达到一定次数时,rescureParty会发挥作用,rescureParty也分为不同级别,先重置简单设置,如果还是无法正常启动,再重置重要设置,如果还是无法正常启动,最后重启系统进入recovery模式,并且询问用户 是否需要擦除data分区。同样当系统的PersistentApp 挂掉重启时,也是同样救援级别会提升一级。

2024-06-18 10:25:09 193

原创 插入usb鼠标后,界面发生闪烁

configuration_changed: 96,将96换成16进制是0X60,但是在实际使用中,我们通常会从log中查看到configChanges,但不确定到底是哪个config的变更导致的,这就需要从framework中查看。但是在attrs_manifest.xml中并没有找到0x60这个数值,那可能是两个数值的和是0x60,0x20+0x40=0x60。文件路径:frameworks/base/core/res/res/values/attrs_manifest.xml。

2024-06-18 10:22:25 421

原创 android的getColor颜色函数返回值为负数的原因

在安卓程序中,与颜色相关的函数需要的参数往往为一个负数,这个负数的值是由原本的颜色代码减去0xffffff得到的,也就是说,如果你想要显示红色,你所要传给函数的参数不应该是0xff0000,而是(0xff0000-0xffffff),也就是-0x00ffff,也就是-65536。在程序中,会以红绿蓝的顺序生成一个六位的十六进制数来表示颜色,比如红色表示为0xff0000,绿色表示为0x00ff00,蓝色表示为0x0000ff,黄色表示为0xffff00等。

2024-06-18 10:01:53 141

原创 am_kill的reason中 cached17和empty 17分别代表啥

那么am_kill的reason cached17和empty 17分别代表啥在Android系统中,通过am_kill命令直接操作并不标准,因为ADB命令中并没有直接名为am_kill的子命令。然而,从您的描述中提到的“reason cached17”和“empty 17”,可以推测这些信息可能来源于系统日志或描述某个操作的结果,特别是在与进程管理和终止相关的上下文中。

2024-06-17 17:20:01 380

原创 android的进程状态管理

Android系统的进程状态管理是基于Linux内核的机制之上构建的,但具有自己独特的设计理念和管理策略。Android将进程分为多种状态,每种状态都反映了进程的不同活跃程度以及系统对待它们的不同方式。总之,Android的进程状态管理是一个综合了Linux内核机制与Android特定策略的复杂系统,旨在提供良好的用户体验同时优化资源利用。

2024-06-17 17:17:51 323

原创 ActivityManager.PROCESS_STATE_CACHED_ACTIVITY

虽然这些Activity虽然不活跃,但有可能随时被用户再次访问,因此在onSaveInstanceState()方法中保存必要的UI状态和数据是非常重要的,以确保即使进程被回收,也能在Activity重新创建时恢复到之前的状态。这个状态特指那些包含不再可见但仍然被缓存的Activity的进程。简而言之,PROCESS_STATE_CACHED_ACTIVITY是Android进程管理机制中一个关键状态,体现了系统在用户体验和资源管理之间的权衡,确保既能快速响应用户操作,又能有效利用有限的系统资源。

2024-06-17 17:16:56 420

空空如也

空空如也

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

TA关注的人

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