前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android四大组件:关于Activity的知识都在这里了

Android四大组件:关于Activity的知识都在这里了

作者头像
Carson.Ho
发布2019-02-22 15:51:50
6460
发布2019-02-22 15:51:50
举报
文章被收录于专栏:Android知识分享Android知识分享

前言

  • Activity属于 Android的四大组件之一
  • 本文将全面解析 Activity ,献上1份 Activity的学习攻略,包括其生命周期、启动模式、启动方式等等,希望你们会喜欢。

目录


1. 定义

即 活动,属于 展示型组件

属于Android四大组件之一:ActivityServiceBroadcastReceiverContentProvider


2. 作用

显示界面 & 与用户进行交互

  1. 一个Activity通常是一个界面,是四大组件唯一能被用户感知的
  2. 每个活动被实现为一个独立的类, & 从活动基类继承过来
  3. Activity之间通过Intent进行通信

3. 生命周期

  • 具体如下图

更加详细请看文章:Android基础:3分钟详解Activity生命周期


4. 启动模式

  • Activity的启动模式有4种,具体如下
  • 4种启动模式的区别

更加详细请看文章:Android基础:最易懂的Activity启动模式详解


5. 启动方式

  • 启动Activity的方式主要是:显式Intent & 隐式Intent
  • 具体介绍如下:

5.1 显式Intent(3种)

代码语言:javascript
复制
// 1. 使用构造函数 传入 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);

5.2 隐式Intent

代码语言:javascript
复制
// 通过Category、Action设置
Intent intent = new Intent(); 
intent.addCategory(Intent.CATEGORY_DEFAULT); 
intent.addCategory("com.hc.second"); 
intent.setAction("com.hc.action"); 
startActivity(intent);

5.3 匹配规则

更加详细请看文章:Android:关于 Intent组件的那些小事(介绍、使用方法等)


6. 启动过程

Activity的启动过程具体如下:

6.1 示意图

6.2 具体描述

当请求启动Activity时:

  1. Launcher进程通过Binder驱动向ActivityManagerService类发起startActivity请求;
  2. ActivityManagerService类接收到请求后,向ActivityStack类发送启动Activity的请求;
  3. ActivityStack类记录需启动的Activity的信息 & 调整Activity栈 将其置于栈顶、通过 Binder 驱动 将 Activity 的启动信息传递到ApplicationThread线程中(即Binder线程)
  4. ApplicationThread线程通过HandlerActivity的启动信息发送到主线程ActivityThread
  5. 主线程ActivityThread类接收到该信息 & 请求后,通过ClassLoader机制加载相应的Activity类,最终调用ActivityonCreate(),最后 启动完毕

7. 卡顿原因

Activity的卡顿原因主要归结如下:

关于内存泄漏 & 性能优化,请看系列文章:

Android性能优化:这是一份全面&详细的内存优化指南

Android性能优化:手把手带你全面了解 内存泄露 & 解决方案

Android性能优化:那些关于Bitmap图片资源优化的小事

Android性能优化:手把手带你全面了解 绘制优化

Android性能优化:布局优化 详细解析(含、、讲解 )


8. 加速启动方式

加速启动Activity的方式归结如下:


9. 缓存方式(状态保存)

  • 问题描述
  • 具体说明

10. Activity 与Fragment的交互方式

至此,关于Android四大组件之一的Activity讲解完毕。


11. 总结

  • 本文全面讲解了 Activity,现在大家对 Activity应该十分了解了
  • 下一篇文章我将对讲解Android 的相关知识,有兴趣可以继续关注Carson_Ho的安卓开发笔记

请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 目录
  • 1. 定义
  • 2. 作用
  • 3. 生命周期
  • 4. 启动模式
  • 5. 启动方式
    • 5.1 显式Intent(3种)
      • 5.2 隐式Intent
        • 5.3 匹配规则
        • 6. 启动过程
          • 6.1 示意图
            • 6.2 具体描述
            • 7. 卡顿原因
            • 8. 加速启动方式
            • 9. 缓存方式(状态保存)
            • 10. Activity 与Fragment的交互方式
            • 11. 总结
            • 请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档