美文网首页Android开发Android开发Android技术知识
Carson带你学Android:关于Activity的知识都在

Carson带你学Android:关于Activity的知识都在

作者: Carson带你学安卓 | 来源:发表于2021-08-24 11:57 被阅读0次

    前言

    • Activity属于 Android的四大组件之一
    • Carons将献上一份 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种)

    // 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

    // 通过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性能优化:布局优化 详细解析(含<include>、<ViewStub>、<merge>讲解 )


    8. 加速启动方式

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

    示意图

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

    • 问题描述
    示意图
    • 具体说明
    示意图

    10. Activity 与Fragment的交互方式

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


    11. 总结

    本文全面讲解了 Activity,现在大家对 Activity应该十分了解了。Carson带你学四大组件文章系列:

    Carson带你学Android:页面活动-Activity
    Carson带你学Android:广播-BroadcastReceiver
    Carson带你学Android:服务-Service
    Carson带你学Android:内存承载器-ContentProvider


    欢迎关注Carson_Ho的简书

    不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度


    请点赞!因为你的鼓励是我写作的最大动力!

    相关文章

      网友评论

        本文标题:Carson带你学Android:关于Activity的知识都在

        本文链接:https://www.haomeiwen.com/subject/jhcxkftx.html