客户端基础知识 | 青训营笔记

142 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

客户端基础知识必备

一、基础组件

1.1界面组件(Activity&Fragment)

Activity

  1. 什么是Activity:Activity主要负责与用户交互。 Activity是四大组件之一,Android规定四大组件必须在AndroidMainfest.xml 中注册,Activity如果不注册,则会引起 App Crash 报错。
  2. Activity的生命周期:
  • onCreate( ):表示Activity正在被创建,做一些初始化工作
  • onStart( ):表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户交互
  • onResume( ):表示Activity已经可见了,并且出现在前台并开始活动
  • onPause( ):(暂停)当另一个Activity遮挡当前Activity,当前Activity被切换到后台时调用
  • onRestart( ):(重新启动)当另一个Activity执行完onStop()方法,又被用户打开时调用
  • onStop( ):如果另一个Activity完全遮挡了当前Activity时,该方法被调用
  • onDestory( ):当Activity被销毁时调用 3.Activity生命周期的演示:
  • 正常打开和关闭Activity

1659346576163.png

  • 部分遮挡以及遮挡恢复

1659346661131.png

  • 页面全遮挡以及遮挡恢复

1659346716270.png

  • 配置发生改变时(屏幕翻转)

1659346924579.png

  1. Activity的启动模式
  • standard默认模式:Activity按顺序压入栈中,无论栈中是否已经有该Activity
  • SingleTask栈内复用模式:判断当前任务中是否存在该Activity ,如果没有,则新建一个,并正常入栈,如果存在,则把该Activity上面全部弹出,将此Activity暴露在最上面
  • SingleTop栈顶复用模式:判断当前栈顶是否是该Activity,若不是,则新建一个,并正常入栈,若是,不用新建,直接复用栈顶的Activity
  • SingleInstance全局唯一模式:如果发现某任务栈已经存在该Activityl,直接复用,不新建,如果还没有,则直接开辟一个栈,新建该Activity入栈,专门盛放该Activity独享一个任务栈

Fragment

  1. 什么是Fragment:Android3.0引入Fragment技术,译为“碎片、片段”,在Activity中可以通过FragmentManager来添加、移除和管理所加入的Fragment,每个Fragment都有自己的布局、生命周期、交互事件的处理,由于Fragment是嵌入到Activity中的,所以Fragment的生命周期又和Activity的生命周期有密切的关联。
  2. Fragmen的创建
  • 静态加载:使用XML代码导入Fragment
  • 动态加载:FragmentManager,FragmentTransaction加载
  1. Fragment的生命周期

1659348321453.png 4 . Fragment的交互(与Activity)

  • Activity向Fragment :通过构造方法,通过public方法,通过Argument,通过接口
  • Fragment向Activity:通过getActivity,通过接口
  • Fragment之间的传递:通过Activity中转,通过接口

1.2服务组件(Service)

Service

  • 基本用法: 注册:Manifest中使用标签注册

创建:创建Service实现类

加载

使用startService()方法启动Service组件,运行在系统的后台在不需要用户交互的前提下,实现某些功能;

使用bindService()方法启动Service组件,启动者与服务者之间建立“绑定关系”,应用程序可以与Service组件交互;

  • Service生命周期:

1659348983370.png

  • Service(与Activity通信)

1659349074864.png

1.3广播组件(BroadcastReceiver)

BroadcastReceiver

无序广播:通过sendBoradcast()方法发送的广播,普通广播对于接收器来说是无序的,没有优先级,每个接收器都无需等待即可以接收到广播,接收器之间相互是没有影响的,这种广播无法被终止,即无法阻止其他接收器的接收动作。

有序广播:通过sendOrderedBroadcast()方法发送的广播,有序广播对于接收器来说是有序的,有优先级区分的,接收者有权终止广播,使后续接收者无法接收到广播,并且接收者接收到广播后可以对结果对象进行操作。

注册广播接收器的方式:配置文件静态注册和在代码中动态注册。

配置文件中静态注册:BoradcastReceiver组件使用标签配置,写在application标签内部,receiver标签内的标签用于设置广播接收器能够响应的广播动作。

使用代码动态注册:使用context中的registerReceiver(BoradcastReceiver receiver ,IntentFileter filter)方法,参数receiver是需要注册的广播接收器,参数filter是用于选择相匹配的广播接收器,使用这种方法注册广播接收器,最后必须解除注册,解除注册使用context的unregisterReceiver(BoradcastReceiverreceiver)方法,参数receiver为要解除注册的广播接收器。

1.3数据组件(ContentProvider)

ContentProvider

在一个程序中自定义ContentProvider类(继承自ContentProvider),并实现其中的抽象方法,在配置文件中使用标签对其进行注册(标签中有3个很重要的属性:name为指明自定义的ContentProvider的全路径,authories为访问标识,exported是否允许外部应用访问),在另一个需要操作该程序数据的程序中,通过context类的getContentResolver方法获得ContentResolver类的实例对象,ContentResolver类执行增、删、改、查操作的方法与ContentProvider类的几乎一致,通过调用ContentResolver类实现类的方法来实现数据操作(在这些方法中仍然会用到Uri参数,其应与被操作数据的所在程序中的定义的Uri一致)。

二、通信组件

Binder

Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有的进程间通信IPC手段包括(Internet Process Connection):管道(Pipe)、信号(Signal)和跟踪(Trace)、插口(Socket)、报文队列(Message)、共享内存(Share Memory)和信号量(Semaphore)。Binder可以提供系统中任何程序都可以访问的全局服务。

Handler

Android中主线程是不能进行耗时操作的,子线程不能进行更新UI,所以就有了Handler,其作用就是实现线程之间的通信。

Handler在整个线程通信的过程中,主要有四个对象,Handler、Message、MessageQueue、Looper等,当应用创建时,就会在主线程中创建Handler对象,将要传递的信息保存到Message中,Handler通过调用sendMessage()方法将Message发送到MessageQueue中,Looper对象不断调用Loop( )方法从MessageQueue中取出Message交给handler进行处理,从而实现线程之间的通信。

总结:通过上述的学习,基本的了解Android的基础知识

部分参照 原文链接:blog.csdn.net/Gaga246/art…