总结 |「基础组件与通信组件 」

一、四大基础组件

* 界面组件:Activity & Fragment
* 服务组件:Service
* 广播组件:Broadcast
* 数据组件:ContentProvider & ContentResolver
  • Activity
    • what:界面的容器
    • why:前台交互,程序入口,布局容器
    • How:注册(程序清单中注册) -> 布局 -> 绑定

crash:程序挂掉了

Fragment:
是什么?
页面容器,与用户进行交互
为了解决什么问题:解决页面碎片化问题;
页面碎片化问题:由于Android设备屏幕尺寸的多样性,同一个App在不同尺寸的设备上显示会出现布局破碎的问题

为什么?
用Fragment的原因:
1)不同页面用 Fragment 承载达到速度快的效果
Activity 启动、调度,切换是要跟系统Service打交道,走Binder,步骤多,耗时
2)实现组件的分离:一个界面具有很多个组件,需要将组件进行分离

怎么用?与 Activity 类似

Fragment 生命周期

Service:服务
场景:播放音乐,界面退出后,仍需要继续播放音乐,即没有界面的任务就是 Service 组件,

如何使用:
1)注册:AndroidMainfest 中使用 <service../> 标签;目的是声明给系统,因为需要与系统进行交互;
2)创建:建立相应的 Service 实现类;
3)加载:startService() / bindService();两种启动模式的区别
bindService:场景:在音乐app中进行播放和操作,需要进行 Service 与 Activity 进行交互,需要与 Activity 进行绑定;
startService:场景:下载,启动后无需进行与其交互

生命周期:

onStart():服务启动;
onBind():与界面容器进行绑定;
onCreate():初始化;
onDestory():销毁;

Service 与 Activity 进行通信:
Activity 是与用户直接进行交互的容器,
在 Android 应用中的一个 Activity 中调用 bindService() 方法并传递 erviceConnection 对象时,是为了与一个后台运行的Service进行通信。这种通信方式常用于在应用的不同组件之间传递数据、执行操作或获取后台任务的结果。

步骤:
1)定义Binder子类,并实现getService()方法,返回Service对象;
2)实例化Service类onBind()方法,返回上述Binder对象;
3)实例化ServiceConnection对象,实现onServiceConnected() 方法,从中获取到 Service 实例;
4)Activity 调用 bindService 方法,并传递 ServiceConnection 对象,
5)在上一步拿到对象之后,就可以在 Activity 中进行调用了;既可以通过调用 Service 实例中的方法进行直接通信;通信即拿到对象就可以直接调用了;

Broadcast:广播
系统事件通知给 app

静态广播

动态广播

Intent :表达了一个意图,对系统来说,就是要告诉系统干什么事情(需求),

意图发给系统,系统处理;

意图,涉及到 Intent 的匹配,谁来处理 Intent,

  • 显式 Intent:指定这个意图处理的类对象;
  • 隐式 Intent
    • Action(动作)
    • Data(数据)
    • Category(类别)
    • Type(数据类型)
    • Component(组件)
    • Extra(扩展信息):启动页面后附加的一些数据
    • Flag(标志位):指定启动的标志

二、通信组件

进程,线程
多进程,多线程
在 Android 中多进程与多线程是如何进行通信的

1、线程间通信

  • Handler

    • 字面意思:处理者;

    • 处理什么:处理线程间通信;有明确的场景就是处理主线程间通信

    • 在 Android 中,对界面进行更新/改变界面属性一定是在主线程中进行操作的(在子线程进行界面操作会报异常,导致 app 崩溃),主线程资源比较宝贵,主线程需要响应用户的操作;

    • 耗时任务要放到子线程中,子线程操作完更新界面通知主线程,通过 Handler 来通知主线程;

  • Handler 基本用法

    • 创建:新建 Handler,实现 handleMessage(Message)

      • handleMessage():处理消息;
      • Message:消息;给主线程发送的一些事件/通知;包含线程间通信的描述和数据;
    • 发送:在子线程中创建 Handle 类的实例,并通过它发送 Message 到主线程,子线程调用 sendMessage(Message) 发送Message;

    • 在主线程中创建同一个Handler实例,绑定到主线程的Looper;

    • 处理:当发送的 Message 到达主线程时,会回调 Handler 的handleMessage();

  • Handler 核心原理

    • 消息队列;
    • Looper:反复循环不停地处理队列中的 Message,每次从队头取出一个 Message,

2、进程间通信

  • Binder
  • 常用场景:APP 启动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工科男小Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值