Android的四大组件

1 Android的四大组件

1.1 Activity

(1)Android的定义

  1. Android是四大应用组件之一,Activity是用来提供一个能让用户操作并与之交互的界面;
  2. 一个应用有多个界面,也就是包含多个Activity;
  3. 打电话、发短信、拍照、发邮件等功能都是通过Activity来做的;

(2)Intent
Intent,直译为意图,是Activity、Service和BroadcastReceiver这三个应用组件之间进行通信的信使;
(3)Activity的一般启动与一般返回

  1. startActivity(intent);
  2. finish():结束当前的Activity;

(4)Activity的带回调启动与带结果返回

  • startActivityForResult(intent,code);
  • onActivityResult(int requestCode,int resultCode,Intent data);
  • setResult(int ressultCode,Intent data):带结果返回;

(5)Activity的生命周期
Android的四大组件_第1张图片

(6)Activity的Task Stack结构来存储管理启动的Activity对象
Activity的加载模式:

  • standard(默认模式):标准模式,每次调用startActivity()方法就会产生一个新的实例;
  • singleTop:如果已经有一个实例位于Activity栈的顶部时,就不会产生新的实例,如果不位于栈顶,会产生一个新的实例;
  • singleTask:在同一个任务栈中,如果要启动的目标Activity已经在栈中,则会复用该Activity,并且该Activity上面的Activity会被清除,如果栈中没有,则创建新的实例;
  • singleInstance:只有一个实例,创建时会新建一个栈,且此栈中不能有其它对象;

1.2 ContentProvider

(1)为什么要有ContentProvider?
功能需求:一个应用需要访问另一个应用的数据库表数据;
实际情况:一个应用的数据库文件是应用私有的,其它应用不能直接访问;
(2)ContentProvider是什么?
ContentProvider是Android的四大应用组件之一,当前应用使用ContentProvider将数据库表数据操作暴露给其它应用访问,其它的应用需要使用ContentResolver来调用ContentProvider的方法,它们之间的调用是通过Uri来进行交流的;
(3)相关的API
ContentProvider:内容提供者类;
ContentResolver:内容解析器类;
Uri:包含一个具有一定格式的字符串所对应资源的类;
UriMatcher:用来识别Uri的一个Uri容器;
ContentUris:操作Uri的工具类;

1.3 Broadcast

(1)特点与作用
a)广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理);
b)一个应用可以在发生特定事件时发送Broadcast,系统中任何应用只要是注册了对应的Receiver就会接收到此Broadcast;
c)一个应用如果对某个广播感兴趣,就可以注册对应的Receiver来接收广播;
d)广播事件机制是应用程序(进程间)之间的通信的一种手段;
(2)常见的广播
a)收到短信广播:android.provider.Telephony.SMS_RECEIVED(发送一个有序广播);
b)开机完成广播:Intent.ACTION_BOOT_COMPLETED;
c)应用被卸载广播:Intent.ACTION_PACKAGE_REMOVED;
d)手机锁屏:Intent.ACTION_SCREEN_OFF;
e)手机开屏:Intent.ACTION+SEREEN_ON;
(3)发送广播

  1. 发送一般广播
  2. 发送有序广播
  3. 一般广播与有序广播的区别:
    a)多人接收时是否有序:
    一般广播:无序,都会同时执行
    有序广播:有序,根据优先级和注册的先后顺序依次执行;
    b)是否可以中断
    一般广播:不可以中断;
    有序广播:可以中断,当中断之后,后续的接收器将不再接收到广播了;
    (4)注册广播接收器
  4. 静态注册
  5. 动态注册

1.4 Service

(1)什么是Service?

  1. Service是一个应用组件,它用来在后台完成一个时间跨度比较大的工作且没有关联任何界面;
  2. 一个Service可以完成以下这些工作:
    a) 访问网络;
    b)播放音乐;
    c)文件IO操作;
    d)大数据量的数据库操作;

(2)Service的特点:

  • Service在后台运行,不用与用户进行交互;
  • 即使运用退出,服务也不会停止;
  • 在默认的情况下,Service运行在应用程序进程的主线程(UI线程)中,如果需要在Service中处理一些网络连接等耗时的操作,那么应该将这些任务在分线程中处理,避免阻塞用户界面;

(3)Service的分类
本地服务:Service对象与Service的启动者在同个进程中运行,两者的通信是进程内通信;
远程服务:Service对象与Service的启动者不在同一个进程中运行,这时存在一个进程间通信的问题,Android专门为此设计了AIDL来实现进程间通信;
(4)Service的生命周期
startService(intent):
第一次调用:构造方法()->onCreate()->onStartCommand();
再次调用:onStartCommand();
stopService():onDestroy();
bindService(intent,serviceConnection):
调用:构造方法()->onCreate()->onBind()->onServiceConnected();
unBindService():onUnBind()->onDestroy();
(5)AIDL
AIDL:Android Interface Definition Language,即Android接口定义语言,用于生成可以在Android设备上两个进程之间进行进程间通信的代码;
每个应用程序都运行在自己的独立进程中,并且可以启动另一个应用进程的服务,而且经常需要在不同的进程间传递数据对象;
在Android平台,一个进程不能直接访问另一个进程的内存空间,所以想要对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界;
(6)Service与Activity的区别?
Activity:

  • Activity对应一个界面;
  • 应用退出,Activity对象就会死亡;
  • 应用再次进入,启动的Activity对象是重新创建的;

Service:

  • 不与任何界面关联;
  • 应用退出,Service仍在运行;
  • 应用再次进入,启动的Service还是前面运行的Service对象;

(7)Service与Thread的区别?
Service:

  • 用来在后台完成一个时间跨度比较大的工作的应用组件;
  • Service的生命周期方法运行在主线程,如果Service想做持续时间比较长的工作,需要启动一个分线程(Thread);
  • 应用退出,Service不会停止;
  • 应用再次进入,可以与正在运行的Service进行通信;

Thread:

  • 用来启动一个分线程的类,做一个长时间的工作;
  • Thread对象的run()在分线程执行;
  • 应用退出:Thread不会停止;
  • 应用再次进入,不能再控制前面启动的Thread对象;

你可能感兴趣的:(Android,android,android,studio,ide)