当前位置: 首页 > news >正文

东莞网站设计服务/google官网下载

东莞网站设计服务,google官网下载,铜仁市住房和城乡建设厅网站,南宁网站建设公司文章目录 Activity一个APP的启动过程基本概念总图zygote是什么?有什么作用?SystemServer是什么?有什么用,与zygote的关系是什么?为什么称为服务端对象?APP、AMS、zygote是三个独立的进程,他们之…

文章目录

  • Activity
    • 一个APP的启动过程
    • 基本概念
      • 总图
      • zygote是什么?有什么作用?
      • SystemServer是什么?有什么用,与zygote的关系是什么?为什么称为服务端对象?
      • APP、AMS、zygote是三个独立的进程,他们之间如何通信呢?(IPC通信方式)
      • Launcher是什么?什么时候启动的?
      • Instrumentation是什么?和ActivityThread是什么关系
      • ActivityStack和ActivityRecord是什么关系?
      • 一个APP的程序入口是什么?APP的主线程消息循环在哪里创建?
    • Activity的生命周期
      • 如果在一个Activity中启动另外一个Activity执行过程是怎么样的?
    • Activity的启动方法
    • IntentFilter匹配规则
    • Activity的四种启动模式
    • 造成Activity卡顿的原因及解决方法
  • Fragment
    • Fragment生命周期
      • Fragment生命周期与Activity生命周期对比

Activity

一个APP的启动过程

基本概念

  • ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期。
  • ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作。
  • ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯。
  • ApplicationThreadProxy,是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。
  • Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作。
  • ActivityStack,Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。通过ActivityStack决定是否需要启动新的进程。
  • ActivityRecord,ActivityStack的管理对象,每个Activity在AMS对应一ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像。
  • TaskRecord,AMS抽象出来的一个“任务”的概念,是记录ActivityRecord的栈,一个“Task”包含若干个ActivityRecord。AMS用TaskRecord确保Activity启动和退出的顺序。如果你清楚Activity的4种launchMode,那么对这个概念应该不陌生。

总图

在这里插入图片描述

zygote是什么?有什么作用?

fork是Unix/Linux操作系统中的一个用于创建新进程的系统调用函数,fork会复制原进程的所有内容包括代码、数据和内存空间。

zygote:直译为受精卵zygote 是一个进程的名字,Android是基于Linux系统的,当手机开机后,Linux内核加载完成之后就会启动一个init 的进程,在Linux系统中,所有的的进程都是init进程fork出来的,zygote进程也不例外。

每一个APP其实都是:

  • 一个单独的dalvik虚拟机
  • 一个单独的进程

当系统里边的第一个zygote进程运行之后,开启APP,就相当于新开启一个进程,而为了实现资源共用和更快的启动速度,Android系统开启新进程的方式是通过fork一个zygote进程实现的。就像受精卵这种有遗传物质的细胞一样,快速进行分裂。

SystemServer是什么?有什么用,与zygote的关系是什么?为什么称为服务端对象?

zygote进程后开启后会执行startSystemServer(),fork出SystemServer进程

SystemServer是Android Framework中除zygote外另一个十分重要的线程,系统里边的重要服务:ActivityManagerService、PackageManagerService、WindowManagerService都在这个线程中开启。

服务端/客户端模型不仅仅存在于Web开发中,在Android框架设计中也是这种模式,服务端是所有APP共有的系统服务,比如上边提到到AMS(活动管理服务)、PMS(包管理服务)、WMS(窗口管理服务),而客户端指的就是Android系统上的各种APP,当某个APP要实现某个操作,需要告诉这些系统服务,例如如果想要打开一个App,最终是由AMS通知zygote进程来fork一个新进程,进而开启目标APP的。

APP、AMS、zygote是三个独立的进程,他们之间如何通信呢?(IPC通信方式)

APP与AMS通过Binder进行IPC通信,AMS与zygote通过Socket进行IPC通信。

APP与AMS之间的通信:
APP相当于客户端,AMS相当于服务端,Binder通信的单向的;

具体实现时采用了代理模式,ActivityManagerProxy作为AMS在客户端的代理人,接收客户端的请求参数,通过Binder驱动传输到服务器的AMS实际执行请求。

ApplicationThreadProxy作为APP在服务端的代理人,

客户端 ActivityManagerProxy ----->Binder驱动---->ActivityManagerService:服务器

客户端ApplicationThread <------Binder驱动 <------ ApplicationThreadProxy:服务器

Launcher是什么?什么时候启动的?

当我们点击手机桌面上的图标时,App就由Launcher开始启动,Launcher本质上也是一个应用程序,和我们的App一样,也是继承自Activity,Launcher实现了点击、长按等回调接口,来接收用户的输入。Launcher中开启一个App,其实和我们在Activity中直接startActivity()基本一样,都是调用了Activity.startActivityForResult()。

Instrumentation是什么?和ActivityThread是什么关系

每个Activity都持有Instrumentation对象的一个引用,但是整个进程只会存在一个Instrumentation对象。Instrumentation翻译为“仪器/手段”,Instrumentation对象包含有很多与Activity生命周期相关的方法,它就像是应用进程的管家。

ActivityThread是APP运行的主线程,也是UI线程,AMS对于Activity的调度信息会通过Binder通信传给 ActivityThread,而ActivityThread是委托Instrumentation来实际执行对Activity生命周期的控制。

ActivityStack和ActivityRecord是什么关系?

每个Activity在AMS对应一个ActivityRecord对象,包含了Activity的状态和管理信息,是Activity实体在AMS的映像。

ActivityStack是Activity在AMS的栈管理,ActivityStack中存放的对象就是ActivityRecord。

一个APP的程序入口是什么?APP的主线程消息循环在哪里创建?

APP的程序入口是ActivityThread.main()
整个APP的主线程消息循环在ActivityThread初始化时就已经创建好了消息循环,所以在主线程里边创建Handler不需要执行Looper,而如果在其他线程里边使用Handler,则需要单独使用Looper.prepare()和Looper.loop(),创建消息循环。

Activity的生命周期

onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()

如果在一个Activity中启动另外一个Activity执行过程是怎么样的?

()中的参数1、2表示Activity的标识。

onCreate(1)->onStart(1)->onRusume(1)->onPause(1)->onCreate(2)->onStart(2)->onRusume(2)->onStop(1)->在Activity2中返回->onPause(2)->onStart(1)->onResume(1)->onStop(2)->onDestroy(2)
在这里插入图片描述

Activity的启动方法

  • 显示启动;

// 1. 使用intent的构造函数 指明context和待启动的activity的class对象。
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

// 2. 使用 setClassName()传入 包名+类名 / 包Context+类名
Intent intent = new Intent();
// 方式1:包名+类名
// 参数1 = 包名称
// 参数2 = 要启动的类的全限定名称
intent.setClassName(“com.hc.hctest”, “com.hc.hctest.SecondActivity”);

// 方式2:包Context+类名
// 参数1 = 包Context,可直接传入Activity
// 参数2 = 要启动的类的全限定名称
intent.setClassName(this, “com.hc.hctest.SecondActivity”);

startActivity(intent);

// 3. 通过ComponentName()传入 包名 & 类全名
Intent intent = new Intent();
// 参数1 = 包名称
// 参数2 = 要启动的类的全限定名称
ComponentName cn = new ComponentName(“com.hc.hctest”, “com.hc.hctest.SecondActivity”);
intent.setComponent(cn);
startActivity(intent);

  • 隐式启动,通过设置Intent的Action(动作)、 Category(类别)和data(数据),构建一个隐式意图,在manifest.xml已经注册的组件中,按照Intent过滤规则,匹配到相应的组件。

IntentFilter匹配规则

总体匹配规则:只有Action、Category和Data同时匹配,才能成功启动Activity。
1个Activity可以有多个Intent-filter,一个Intent只要能匹配任何一组intent-filter就可以成功启动对应的activity。

在这里插入图片描述

Activity的四种启动模式

  • 标准模式(Standard)
  • 栈顶复用模式(SingleTop)
  • 栈内复用模式(SingleTask)
  • 单例模式(SingleInstance)

启动模式的设置方式:

  1. manifest.xml中指定launchMode
<activityandroid:launchMode="启动模式"
//属性
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
//如不设置,Activity的启动模式默认为**标准模式(standard)**
</activity>
  1. 通过Intent设置标志位:
Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

在这里插入图片描述

两种方式设置的区别;

  • 优先级不同
    Intent设置方式的优先级 > Manifest设置方式,即 以前者为准
  • 限定范围不同
    Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP;Intent设置方式 无法设置单例模式(SingleInstance)

造成Activity卡顿的原因及解决方法

在这里插入图片描述

Fragment

Fragment生命周期

  • Fragment 类的代码与 Activity 非常相似。它包含与 Activity 类似的回调方法,如 onCreate()、onStart()、onResume()、onPause() 、 onStop()、onDestroy()。

  • Fragment依附(Attach)于Activity的生命周期而存在。在Activity的onCreate(),我们需要执行Fragment的onAttach()、onCreate()、onCreateView()、onActivityCreated()。

  • Fragment自己独有的生命周期:onAttach、onCreateView、onActivityCreated、onDestroyView、onDetach().
    在这里插入图片描述

Fragment生命周期与Activity生命周期对比

在这里插入图片描述

http://www.fp688.cn/news/232.html

相关文章:

  • 邯郸专业做网站地方/产品推广计划方案
  • 济南市工程造价信息网/长沙搜索排名优化公司
  • 邯郸网站设计注册/班级优化大师官网
  • 茶企业网站/百度关键词搜索热度
  • 电子商务网站的设计/夸克搜索
  • 网站建设搭建微商导航网站/学网络营销有用吗
  • 做网站人家直接百度能搜到的/域名注册新网
  • 做服装招聘的网站/怎么样推广最有效最快速
  • 网站建设空间什么意思/谷歌seo搜索优化
  • 溧阳网站建设制作/网站建设制作免费
  • 做盗版网站的/推广普通话手抄报图片
  • vi设计什么意思/慈溪seo
  • 游戏开发与网站开发哪个难/重庆网站搭建
  • 北京网站设计公司兴田德润放心/今晚赛事比分预测
  • b2c网站的作用/seo sem是啥
  • 动易网站系统怎么样/小程序开发公司排行榜
  • 当当网网站建设需求分析/常州seo排名收费
  • 网站搜索排名优化怎么做/网络营销百度百科
  • 旅游网站开发毕业设计开题报告/免费平台推广
  • python在线编程视频/网站seo分析
  • 网站帮助/最近的疫情情况最新消息
  • 企业微网站与手机微信/东莞企业网站模板建站
  • 如何用网站做cpa/营销活动怎么做吸引人
  • 数字资产交易网站建设/世界互联网峰会
  • 南平建设集团网站/九江seo优化
  • 运动会页面设计/百度搜索引擎优化怎么做
  • 如何创建网站步骤/自助建站系统模板
  • 网站调用微信js视频/微信小程序开发平台
  • 网站建设进度表/关键词排名优化是什么意思
  • 快速建站公司地址/自媒体平台注册官网下载