一、四大组件

Android四大组件分别为ActivityServiceBroadcast ReceiverContent Provider

  1. Activity:用于页面展示。
    通常,一个Activity就是一个单独的窗口,它们之间通过Intent通信。
    每一个Activity都必须在AndroidMamifest.xml配置文件中声明。
  2. Service:用于提供后台服务,完成用户指定的操作。
    service分为两种:
    started(启动):当应用程序组件(如Activity)调用startService()方法启动服务时,服务处于started状态
    bind(绑定):当应用程序组件调用bindService()方法绑定到服务时,服务处于bind状态。

startService()和bindService()的区别:
startedService是由其他组件调用startedService()方法启动的,导致服务的onStartCommand()方法被调用。当服务
是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即便启动服务的组件已经被销毁。
因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。
bindService被调用启动服务时,调用者与服务绑定在了一起,调用者一旦推出,服务也将终止。
开发者需要在应用程序配置文件中声明全部的service,使用
Service通常位于后台运行,一般不需要与用户交互,因此service组件没有图形用户界面。

  1. Broadcast Receiver:用于接受广播
    广播接收器没有图形用户界面。然而,在启用一个Activity或Service来响应接受到到的消息,或者使用NotificationManager
    来通知用户。一般情况,在状态栏放一个持久的图标,打开此即可获取到消息。
    广播接收者有两种注册方法,分别是动态注册和AndroidManifest.xml中静态注册
    动态注册广播接收器的特点是当用户注册的Activity关掉后,广播也就失效了。静态注册无需担心广播接收器是否被关闭。
  2. Content Provider:用于存储和读取数据
    Content Provider将指定数据集提供给其他应用程序,实现数据共享,这是不同应用程序之间共享数据的唯一方式。
    开发者不会直接使用ContentProvider类的对象,大多数都是通过ContentResolver对象对ContenProvider操作。
    比如通讯录、短信等。
    ContentProvider设计的用意在于对数据进行封装,提供统一的接口,开发者完全不用关心这些数据是如何请求来的。

二、七大生命周期

  • onCreate():当Activity第一次被创建时调用,完成活动的初始化操作
  • onStart():当用户可以看到这个Activity时调用
  • onResume():当获得了用户的焦点时,就是用户点击了屏幕
  • onPause():当系统被另一个活动时调用,在这个方法中将一些消耗的
    资源释放,保存一些重要的数据。
  • onStop():当活动完全不可见时,当新启动的活动是对话框式的后台活动,才会被调用
  • onDestory():活动被销毁时调用
  • onRestart():当活动在后台运行时处于停止状态,重新打开变为运行状态时调用

三、消息处理机制

LooperHandlerMessageQueueMessage
消息处理机制本质:一个线程开启循环模式持续监听并一次处理其他线程给它发的消息。

  • Looper
    不断循环执行Looper.loop(),从MessageQueue中读取消息,按分发机制将消息分发给目标处理者。
    在主线程中调用Looper.prepare(),Looper.loop()就会使当前西安城变为Looper线程(无限循环不退出的线程)
    Looper的另外一部分工作就是在循坏代码中不断从消息队列中拿出消息给主线程处理。

  • MessageQueue
    消息队列,就是在同一个线程同一时间只能处理一个消息,同一线程的代码执行不具备并发性。但内部实现并不是
    使用的消息队列。实际上是通过一个单链表的数据结构来维护消息列表,因为单链表在插入和删除上存在优势。
    主要功能:向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);

  • Handler
    消息辅助类,主要功能向消息池发送各种消息事件(Handler.sendMessage)和统一处理消息的回调(Handler.handleMessage);
    Handler用于同一个进程的线程间通信。

  • Message
    需要传递的消息,进行消息的传递

MessageQueue,Handler和Looper三者之间的关系:
每个线程中只能存在一个Looper,Looper是保存在ThreadLocal中的。
主线程(UI线程)已经创建了一个Looper,所以在主线程中不需要再创建Looper,但是在其他线程中需要创建Looper。
每个线程中可以有多个Handler,即一个Looper可以处理来自多个Handler的消息。 Looper中维护一个MessageQueue,
来维护消息队列,消息队列中的Message可以来自不同的Handler。

Android入门教程学习笔记相关推荐

  1. 51单片机入门教程学习笔记

    基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...

  2. 微信小程序入门教程学习笔记

    写在前面: 作为一个刚刚入坑微信小程序的小白,以下是我在学习中的笔记,因为我真的太健忘了... 文章中可能会有错误,但是我会不断的修正的. 谢谢浏览,如有错误烦请指正 (≧∀≦)ゞ 微信官方的小程序开 ...

  3. 廖雪峰git入门教程——学习笔记

    https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 Q1:什么是GIT? A1:分布 ...

  4. Android入门教程1【学前准备】

    Android入门教程 学习Android的学前准备 我呢,不像别人,有自己的学习风格,我觉得在0基础的情况下去学一门语言,最重要的是什么,是计划,无目的这看看那看看的只会让你迷茫.废话不多说,直接跟 ...

  5. Android开发技术学习笔记

    目标:全面学习知识点,能理解原理,多实战练习并做笔记与总结学习心得 Android开发技术学习笔记记录如下: Android开发Google的官网https://developer.android.g ...

  6. PHPWeb开发入门体验学习笔记

    PHPWeb开发入门体验学习笔记 4 一.PHP web应用开发须知 1.入门要点 程序员三个阶段:码农(速成技能)->工程师(长期知识)->专家(研究论文) 编程三要素:声明变量(系统. ...

  7. Android入门教程:ConstraintLayout约束布局

    原文首发自掘金芦苇APP团队,转载到自己小号上再发一遍~ 翻译By Leelion6.关于 ConstraintLayout 的文章其实已经不少了,不过看到这篇文章写的很有趣,以及在翻译的过程中,感受 ...

  8. 黑马程序员最新版JavaWeb基础教程-学习笔记

    da@黑马程序员最新版JavaWeb基础教程-学习笔记 day06-HTML&CSS HTML HTML(HyperTest Markup Language):超文本标记语言 是一门语言,所有 ...

  9. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

最新文章

  1. 从安装Kafka服务到运行WordCount程序
  2. 2016 CVPR 德州仪器 ADAS Tutorial
  3. 聊聊resilience4j的CircuitBreakerStateMachine
  4. 如何编写高效android代码
  5. MFC 学习笔记(一):MFC单文档程序运行流程梳理与总结
  6. MySQL Cookbook 学习笔记-02
  7. iOS UIStepper使用方法的总结
  8. spring 使用 groovy 的 utf-8 问题
  9. 【面试题】华为20道大数据面试题整理
  10. 软件测试工具常用的都有哪些?
  11. Vue事件修饰符.prevent .passive
  12. 护眼色RGB值和HSV值
  13. 麻省理工学院公开课:MBA金融学、字幕、去时间轴版
  14. 算力之都杭州:楼市向何处去
  15. todd的hadoop world的ppt笔记
  16. 锐角云CEO许胜:因为认同,所以入行
  17. 数据库例题(创建数据库SPJ包含S、P、J和SPJ表)
  18. 李沐动手学深度学习v2/总结3
  19. 关于jupyter notebook闪退问题【我真真的够了,大家以后不要乱捣鼓电脑了,绝了】
  20. 第一个RSF自动化测试用例-启动打开百度页面,搜索【月饼】关键字,关闭浏览器...

热门文章

  1. php怎么读取word文档
  2. static静态变量 与 常量
  3. 手机qpython3 如何画图_记住这3个功能,一分钟掌握python sns作图
  4. error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *) (?InitD3D
  5. abs和pc混在一起怎么解决_PC/ABS常见问题及解决方案
  6. VS开发工具的常用插件
  7. HDU 5761 Rower Bo
  8. clear both 的用法
  9. 【MYSQL报错】ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry
  10. SWIG和MapGuide Web API