Android Module

Android四大组件学习

Android的四大组件包括:Activity(活动)、Service(服务)、BroadcaseReceiver(广播接收器)、ContentProvider(内容提供者)。

module

  1. Activity:通俗来讲其实就是App上面用户看到的每个界面,Activity组件负责界面展示、处理用户交互、进行数据传递
  2. Service:无界面的后台组件,用于执行长期执行的操作。就比如说应用商城后台下载的东西、后台播放网易云音乐等
  3. BroadcaseReceiver:手机里的“消息喇叭”,用于监听系统或者应用发出的全局事件的组件,比如说网络状态的变化,充电状态的变化等
  4. ContentProvider:应用间的“数据共享存储桥”,是管理跨应用访问的组件,通过URL来标识数据,比如说我们的手机通讯录是不是可以被多个应用访问读取

Activity(活动)

1.什么是Activity

Activity通俗来讲就是用户所看到每一个页面,是Android应用中用来展示用户界面的组件,我们可以通过它来进行应用程序的交互。

Activity可以想象成手机的每一个“页面”。比如当你打开一个App时,你看到的第一个界面就是一个Activity,这时你点击某一个按钮跳转到另一个界面就是另一个Activity。每一个Activity都是一个独立的界面,负责用户的交互和展示内容。

2.Activity的生命周期

Activity的生命周期包括以下几个关键方法:

1.onCreate(): Activity被创建调用。比如,当你点击QQ时,系统会创建QQ的MainActivity,并且调用OnCreate()这个方法。通常会在这里初始化界面和变量,这时候我们看到的界面是空白的。

2.onStart():Activity即将可见时调用。比如,QQ的首页即将显示在屏幕上。

3.onResume():Activity获得焦点,用户可以与之交互调用。比如,QQ可以完全显示出来,用户可以点击各种按钮来进行操作。

4.onPuase(): Activity失去焦点时调用。比如,用户按了Home键回到桌面或者跳转到了另外一个界面。

5.onStop():Activity不再可见时调用,比如,你点击文章详情页进入到了文章里面。QQ的首页面被完全覆盖。

6.onRestart():Activity从停止状态重新启动时调用。首页Activity从后台回到前台。

7.onDestory():Activity被销毁时调用。比如,用户关闭了页面。

Activity-Cycle

简单来说,将Activity的生命周期来比作人的一生,那么:

1.oncreate():婴儿在母亲的肚子里,这时候别人还看不到婴儿,但是婴儿已经开始被初始化了

2.onStart():出生了,睁开眼,别人看可以看见我们了。但是我们还不会说话,不可以互动(也就是用户还不能跟界面进行互动)

3.onResume():我们长大了,步入青年,开始学习工作跟社会接触(用户可以跟界面进行交互)

4.onPuase():工作学习累了歇一会(Activity被部分遮挡(比如弹出了一个对话框)没有被完全遮挡还可以看到一部分)

5.onStop():退休了(Activity被完全遮挡(比如说跳转到了另外一个Activity上)不再显示在屏幕上面)。

6.onRestart():你决定重新开始工作(Activity从后台回到前台,准备重新显示)

7.onDestory():生命的尽头,over掉了(Activity被系统销毁,释放资源)

3.Activity的生命周期示例

csdn-小梁不秃捏

Servive(服务)

1.什么是Service

可以把Service想象成一个“后台默默无闻的打工人”,它没有UI界面,默默的在后台干活,比如播放音乐、下载文件 、处理网络请求等。即使你退出了App,没有杀死后台,那么Service还可以继续运行。 service

简而言之,Service就是一个无界面的后台组件,用来执行需要长期运行的操作。

2.Service的类型

Service有两种类型:

  1. Started Service(启动式服务)
  • 特点:通过startService()启动,会一直运行,直到任务完成或调用stopSelf()

  • 适用场景:执行一次性任务,比如下载文件、播放音乐

  • 生命周期:onCreate()->onStartCommand()->onDestroy()

  1. Bound Service(绑定式服务)
  • 特点:通过bindService()启动,允许多个组件(比如Activity)绑定到同一个Service。当所有组件解绑后,Service会被销毁

  • 适用场景:提供长期服务,比如后台计算、数据同步

  • 生命周期:onCreate()->onBind()->onUnbind()->onDestroy()

Service

3.Service示例

Startde

Bound

BroadCaseReceiver(广播接收器)

BroadCaseReceiver

1.什么是BroadCaseReceiver

可以把广播接收器想象成一个“收音机”,它的作用是监听系统或应用发出的“广播信息”,并在收到消息后执行相应的操作。

比如:
·手机电量过低,系统检测到了,会发出一个“低电量“的广播,广播接收器可以接收到这个消息并提醒你充电。

·你下载了一个App,下载完成之后,系统会发出一个“下载完成的广播,广播接收器接收到这个消息之后会提醒你进行安装。

简而言之,广播接收器就是用来接收和处理广播消息的组件。

2.BroadCaseReceiver的类型

广播分为两种类型:

(1)系统广播

·特点:由系统发出,比如电池电量低、网络状态变化、屏幕开关等。
·比如:
    ACTION_BATTERY_LOW:电池电量低。
    ACTION_BOOT_COMPLETED:设备启动完成。

(2)自定义广播

·特点:由应用发出,用于应用内部或应用之间的通信。
·比如:在App定义一个广播,比如“任务完成”,然后在其他地方接收并处理。

3.BroadCaseReceiver的注册方式

广播接收器可以通过两种方式注册:

  • 1.静态注册

AndroidManifest.xml里面声明,应用为运行时也能接收到广播。 适用场景:监听系统广播,比如设备启动完成。

示例:

1
2
3
4
5
<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
  • 2.动态注册

在代码中通过**registerReceiver()**注册,通常用于应用运行时的广播。 适用场景:监听应用内部的广播,比如用户点击按钮后发出的广播(例如点击播放下一首音乐的按钮,播放界面接收到发出的广播后就会更新界面UI)

示例:

1
2
IntentFilter filter = new IntentFilter("com.example.MY_CUSTOM_ACTION");
registerReceiver(myReceiver, filter);

4.BroadCaseReceiver的生命周期

广播接收器的生命周期很简单,主要包括两个阶段:

1.*接收广播:当广播发出时,系统会创建广播接收器的实例,并调用它的onReceive()方法。
2.*完成任务:onReceive()方法执行完毕之后,广播接收器的实例会被销毁。

也就是说,广播接收器的生命周期很短暂,它只存在于接收广播并处理完广播的这段时间内。

BroadCaseReceiverLive

5.BroadCaseReceiver的工作流程

BroadCaseReceiver的核心类是android.content.BroadCaseReceiver,一个抽象类

广播接收器的工作流程

(1)注册广播接收器
    ·静态注册:由PackgeManagerService解析AndroidManifest.xml并注册。
    ·动态注册:通过Content.registerReceiver()注册到ActivityManagerService。

(2)发送广播
    ·通过Content.sendBroadcase()发送广播,ActivityManagerService负责分发。

(3)分发广播
    ·BroadcaseQueue从队列中取出广播,并调用广播接收器的onReceive()方法处理。

(4)处理广播
    ·广播接收器的onReceive()方法在运行在主线程中,不能执行耗时操作。

BroadCaseWork

总而言之:BroadcastReceiver工作流程是:PMS/AMS管理注册 → AMS接收广播并匹配 → BroadcastQueue按类型分发 → 应用主线程执行onReceive(10秒内必须返回)→ 整个过程通过Binder IPC跨进程通信,系统通过超时机制防止接收器阻塞主线程。

ContentProvider(内容提供者)

1.什么是ContentProvider

ContentProvider

访问方(其他应用)不需要知道数据是存储在SQLite数据库、文件系统还是网络上,只需要通过ContentResolver(内容解析器)对象,传入对应的URL和参数,即可以完成操作。ContentResolver会负责找到正确的ContentProvider并执行请求。

简而言之:contentProcvider其实就是应用间的“数据共享桥”,是管理跨应用访问的组件,通过URL来表示数据。

比如: 手机里面的通讯录,存储了许多人的信息,你如果想把这些联系人分享给其他App,就可以通过ContentProvider来实现。

总结就是:ContentProvider就是用来共享和管理数据的组件。

2.ContentProvider的特点

1.⭐数据共享:ContentProvider可以让不同应用之间共享数据。比如,通讯录App可以通过ContentProvider分享给别人(将联系人信息共享给其他App)。

2.⭐统一接口:ContentProvider提供了一套标准化接口(比如query()、insert()、update()、delete()),其他应用可以通过这些接口来访问数据。

3.⭐数据安全:ContentProvider可以通过权限控制来保护数据。比如:你可以设置只有特定的应用才能访问你的数据。

3.ContentProvider的核心方法

ContentProvider的核心方法包括:

1.query():查询数据。
2.insert():插入数据。
3.update():更新数据。
4.delete():删除数据。
5.getType():返回数据的MIME类型。

总结

Android的四大模块分工明确:

1.Activity(活动):负责界面的展示与应用之间的交互,负责展示界面,用户可以通过界面来与应用进行交互,也就是App的一个个“页面”。

2.Service(服务):在后台默默打工的打工人,比如说下载应用或者播放音乐等会在后台挂着,直到任务完成或者执行stopSelf(),没有界面但能够长期运行。

3.BroadCaseReceiver(广播接收者):像“收音机”一样接收系统或者应用发出的广播,比如电量低或者下载完成的广播,接收到之后会做出响应。

4.ContentProvider(内容提供者):是用来跨应用共享数据的“数据管家”,管理应用的数据并提供统一的接口,让其他应用也可以访问到这些数据。

总而言之:Activity管界面,Service管后台,BroadCaseReceiver管消息,ContentProvider管数据。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus