Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by IBinder token
Android Activity启动流程(Android 13)
Android Activity启动流程(Android 13) 概述 AMS(ActivityManagerService) 是 Android 操作系统中的一个核心组件。它负责管理应用程序的生命周期、进程管理、任务管理、内存管理以及应用程序之间的通信。 在 Android 10 及以后版本中,AMS 的部分功能迁移到了 ATMS,Activity 的管理和调度主要由 ATMS(ActivityTaskManagerService) 负责,而其他三大组件(Service、ContentProvider 和 BroadcastReceiver)仍然由 AMS 管理。AMS 持有 ATMS 的引用,AMS 可以通过 ATMS 处理 Activity。 流程图 App 进程向 SystemServer 进程发送 startActivity 请求。 SystemServer 进程处理 startActivity 请求,如果 App 进程存在,则直接调用直接启动 Activity,如果 App 进程不存在,则向 Zygote 进程发送创建进程消息。 Zygote...
Activity启动流程-CSDN博客
1 冷启动与热启动 应用启动分为冷启动和热启动。 冷启动:点击桌面图标,手机系统不存在该应用进程,这时系统会重新fork一个子进程来加载Application并启动Activity,这个启动方式就是冷启动。 热启动:应用的热启动比冷启动简单得多,开销也更低。在热启动中,因为系统里已有该应用的进程,所以系统的所有工作就是将Activity 带到前台。 2 Activity的启动流程 当我们点击Launcher上的应用图标时,最终会调用到activity的startActivity()函数。我们就从activity的startActivity()开始。 @Override public void startActivity(Intent intent, @Nullable Bundle options) { getAutofillClientController().onStartActivity(intent, mIntent); if (options != null) { startActivityForResult(intent, -1, options); } else {...
android13 应用冷启动-CSDN博客
1 概述 launcher 通过binder到systemserver中atms中发送startActivity请求 startProcess向zygote发送启动新进程请求 zygote收到请求,fork新进程并调用ActivityThread的main初始化 新进程启动,发送attachApplication给ams,告诉他新进程启动成功 ams收到新进程启动成功的消息,做一系列准备工作,ActivityTaskSupervisor的realStartActivityLocked方法发起启动Activity。ActivityTaskSupervisor使用ApplicationThread的Binder代理向被启动的App进程发送scheduleTransaction请求。 被启动的App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送EXECUTE_TRANSACTION消息 主线程在收到Message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法 2...
Android应用程序启动源码浅析-(三万字长文慎点&Android14) - 柳云居士 - 博客园
在Android桌面Launcher源码浅析中介绍了Android的桌面程序Launcher是如何响应用户点击事件并启动App的,这篇文章继续介绍App在Android系统层的启动流程。 sequenceDiagram participant User participant Launcher participant ActivityManagerService participant Zygote participant AppProcess participant Application participant FirstActivity User ->> Launcher: 点击应用图标 Launcher ->> ActivityManagerService: 请求启动Activity ActivityManagerService ->> Zygote: 创建新进程 Zygote -->> AppProcess: fork新进程 AppProcess ->> Application: 创建Application实例 Application ->>...
在Android系统中,一个Activity的Window创建和添加过程-51CTO.COM
2024-05-06 00:00:00 addToDisplay方法内部调用了mService的addWindow方法,并将Session对象本身作为第一个参数传进去。mService就是WMS的实例,每一个app进程都会对应一个Session对象用来表示app进程与WMS的通信渠道。 在Android系统中,一个Activity通常就表示一个页面,这个页面实际是由Window来管理的,每个Activity都对应着一个Window。Window是一个抽象类,具体实现类是PhoneWindow,对View进行管理。确切的来讲是,PhoneWindow包含一个DecorView类型的成员,代表这个Window的顶层View,是一个FrameLayout。DecorView的布局结构包含两部分:标题栏(title)和内容栏(content)。根据设置的主题不同,这两部分也会有不同的呈现。但内容栏是一定存在的,并且id是固定的android.R.id.content。 Window的创建过程是一个涉及多个层次和组件的复杂过程。...
Android ViewModel深入解析
ViewModel介绍(官网介绍) ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面,以及封装相关的业务逻辑。 它的主要优点是,它可以缓存状态,并可在配置更改后持久保留相应状态。这意味着在 activity 之间导航时或进行配置更改后(例如旋转屏幕时),界面将无需重新提取数据。 注意:AndroidX以后才能使用ViewModel ViewModel的优势 个人觉得ViewModel的出现给我们带来了以下几点便利: ViewModel使得UI和业务逻辑分离。这意味着UI代码(如XML布局)专注于显示信息,而ViewModel则处理数据获取、验证和转换。这种分离使得代码更易于阅读和维护。 ViewModel通常与LiveData一起使用,这意味着当ViewModel中的数据发生变化时,UI会自动更新。这减少了手动更新UI的需要,降低了出错的可能性。 由于ViewModel包含业务逻辑,因此可以独立于UI进行测试。这有助于确保你的应用程序在更改UI或添加新功能时仍然正常工作。 ViewModel +...
View是如何被添加到手机屏幕的?-CSDN博客
在 Android 中,我们知道我们能看到的界面都是 Activity ,但是我们能看到的这些 View 是如何被添加到View中的昵?今天这篇文章我们就通过源码来追踪溯源,看看 View 究竟是如何被添加到手机屏幕上的。本文篇幅较长请大家耐心阅读。 我们写一个Activity的时候一般都是如下所示的写法来将资源资源加载到了Activity 。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } 这里我们调用的是 Activity 的 setContentView(@LayoutRes int layoutResID),那么下面我们继续追踪 Activity 的源码,看看它的 setContentView(@LayoutRes int...
Android Activity启动流程一:从Intent到Activity创建
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 @TOC 学习前,建议有相关知识储备: 【Android 基础】 应用(Application)启动流程 通过本文你可以学习到Activity启动流程。 Activity 是 android 四大组件之一,很有必要知道它的启动过程,我们在上一篇文章中介绍了 APP的启动流程,里面大概讲到了Activity的 启动流程,在本文中,我们系统的再总结一下,当成一个记录。 Activity 的启动方式我们讲有两种,一种是在应用内部启动,另一种是外部启动,比如Launcher; 应用内启动 通过 startActivity、startActivityForResult等方式来启动 Activity 其流程我们总结下: 1、调用 Activity 的 startActivity 方法来启动目标 Activity 2、接着就会调用到 Instrunmentation 的 execStartActivity 方法,然后调用到 AMS...
插件化原理_橙子19911016的博客-CSDN博客
插件化技术和热修复技术都属于动态加载,从普及率的角度来看,插件化技术还没有热修复的普及率高,主要原因是占大多数的中小型应用很少也没有必要去采用插件化技术。 Android P preview(Android 9)开始限制调用隐藏 API,也出现了一些绕过限制的方案。无论采用何种方案,插件化的原理还是需要理解的。 动态加载技术是插件化的前身。 在 Android 传统开发中,一旦应用的代码被打包成 APK 并被上传到各个渠道市场,就不能修改应用的源码了。只能通过服务器来控制应用中预留的分支代码。但是很多时候我们无法提前预知需求和突发的情况,也就不能提前在应用代码中预留分支代码,这时就需要采用动态加载技术。 在应用程序运行时,动态加载一些程序中原本不存在的可执行文件并运行这些文件里的代码逻辑。可执行文件总的来说分为两种,一种是动态链接库 so,另一种是 dex 相关文件(dex 以及包含 dex 的 jar/apk 文件)。 随着应用的发展,动态加载技术派生出两个技术,分别是热修复技术和插件化技术: 其中热修复技术主要用来修复...
Android T WMS窗口相关流程
什么是窗口 窗口即是屏幕上的一块用于绘制各种UI元素并可以响应用户输入的一个矩形区域。从原理上讲,窗口的概念是独自占有一个Surface实例的显示区域(我们在屏幕上看到的图形都需要绘制在Surface上)。 Window是个抽象类其实现类为PhoneWindow。 当Activity.onResume()被调用之后,客户端会与WMS进行通信将我们的布局显示在屏幕上。其中主要涉及以下几个过程: 客户端通知WMS创建一个窗口,并添加到WindowToken。即addToDisplayAsUser阶段。 客户端通知WMS创建Surface,并计算窗口尺寸大小。即relayoutWindow阶段。 客户端获取到WMS计算的窗口大小后,进一步测量该窗口下View的宽度和高度。即performMeasure阶段。 客户端确定该窗口下View的尺寸和位置。即performLayout阶段。 确定好View的尺寸大小位置之后,便对View进行绘制。即performDraw阶段。...
Android Activity启动过程一:从Intent到Activity创建
关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 学习前,建议有相关知识储备: 【Android 基础】 应用(Application)启动流程 通过本文你可以学习到Activity启动流程。 Activity 是 android 四大组件之一,很有必要知道它的启动过程,我们在上一篇文章中介绍了 APP的启动流程,里面大概讲到了Activity的 启动流程,在本文中,我们系统的再总结一下,当成一个记录。 Activity 的启动方式我们讲有两种,一种是在应用内部启动,另一种是外部启动,比如Launcher; 应用内启动 通过 startActivity、startActivityForResult等方式来启动 Activity 其流程我们总结下: 1、调用 Activity 的 startActivity 方法来启动目标 Activity 2、接着就会调用到 Instrunmentation 的 execStartActivity 方法,然后调用到 AMS 的...
Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
[置顶]Android 之ActivityThead、ActivityManagerService 与activity的管理和创建 在android中,Activity是四大组件中比较重要的一个(当然其他的也比较重要),那么android中是怎样管理这些activity的?应用的进程和主线程是怎么创建的,应用的消息循环又是在什么时候创建的?在这篇文章中将详细介绍: 先来看下涉及到的类,通过以下类图对整体先有个大概的印象: ActivityThread: ActivityThread主要用来启动应用程序的主线程,并且管理在应用端跟用户打交道的activity。在应用端的activity信息全部被存储在ActivityThread的成员变量mActivities中。 1.
Android App的几个核心概念
Application启动 点击桌面图标启动App(如下流程图) 针对以上流程图示: ActivityManagerService#startProcessLocked() Process#start() ActivityThread#main(),入口分析的地方 ActivityThread#attach(),这个里面的逻辑很核心 ActivityManagerService#attachApplication(),通过Binder机制调用了ActivityManagerService的attachApplication ActivityManagerService#attachApplicationLocked(),整个应用进程已经启动起来 ActivityManagerService#thread.bindApplication,具体回到ActivityThread ActivityThread.ApplicationThread#bindApplication(),最后看到sendMessage处理bind逻辑...
高级UI之Android事件分发机制原理及源码分析_Android技术栈的博客-CSDN博客
前言 在 Android 中,事件分发机制是一块很重要的知识点, 掌握这个机制能帮你在平时的开发中解决掉很多的 View 事件冲突问题,这个问题也是面试中问的比较多的一个问题了,本篇就来总结下这个知识点。 事件分发原因 Android 中页面上的 View 是以树型结构显示的,View 会重叠在一起,当我们点击的地方有多个 View 可以响应的时候,这个点击事件应该给谁,为了解决这个问题就需要一个事件分发机制 事件分发对象 Touch 事件,即将每一个 Touch 事件(MotionEvent)传递给 View,至于最终这个事件有没有处理看接收事件者的逻辑而定 当用户触摸屏幕的时候,就会产生 Touch 事件(Touch 事件被封装成 MotionEvent 对象),其主要分为如下几种 MotionEvent.ACTION_DOWN:使用手指点击屏幕这一瞬间,产生该事件,是所有事件的开始 MotionEvent.ACTION_MOVE:使用手指在屏幕滑动的时候产生该事件 MotionEvent.ACTION_CANCLE:非人为原因结束当前事件...
手把手带你搞懂AMS启动原理_Pingred_hjh的博客-CSDN博客
最近那么多教学视频(特别是搞车载的)都在讲AMS,可能这也跟要快速启动一个app(甚至是提高安卓系统启动速度有关),毕竟作为安卓系统的核心系统服务之一,AMS以及PMS都是很重要的,而我之前在 应用的开端–PackageManagerService(PMS) 已经很详细地讲解过PMS,大家有兴趣的可以去看看。 我们都知道当手机开机时,或者是安装某个apk时,PMS会去扫描加载/data/app目录和system/app里每个apk里的所有类信息并且进行解析,然后缓存到PMS它自己里面定义好的集合里,供AMS使用,AMS即ActivityManagerService就能根据PMS里面的这些类信息来进行创建入口Activity等四大组件类并启动。下面将详细讲解AMS是怎样工作的。 提示:以下是本篇文章正文内容 讲AMS之前,还是得回顾一下PMS的工作流程,PMS会把每个apk进行扫描,然后分别把每个apk里的信息都缓存在mPackages集合里: 它是PackageParser.Package类型,所以我们看看这个类里的内容: public final static class...
深入浅出系列之从new一个Activit的操作延伸到Activity启动流程_ITPUB博客
前言 前段时间在公司一个老项目中 , 看到有个惊为天人的操作 —— 直接 new 了一个 activity , 当然最后他没有调用 , 估计是调用后发现崩溃了 , 当时的第一反应是怎么敢这样干的啊 , activity 的创建应该是 AMS 干的 , 自己 new 的 activity 系统就没办法进行管理 , 关于 activity 的生命周期等等全部都乱套了 , 然后就在想 , 那 Android 的 activity 是如何启动的 , 甚至与 Android 系统是如何启动的 ? 一、 为什么不能自己 new Ac tivity ? 其实 Activity 本质上也是一个普通的类 , 他的基类也是 Object , 所以直接创建 Activity 在编译时并不会报错 , Android 系统中是通过 AMS 来创建 Activity 的 ( 具体分析可以直接看下面的内容 )。 更具体的来说 , Activity 是被 newInstance 创建出来的 。Instrumentation...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with IBinder
Contact IBinder, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack