【新人入门】Android基础知识(四):Android四大组件

目录

一、Activity

二、Service

三、BroadcastReceiver

四、ContentProvider


一、Activity

        Activity主要负责与用户进行交互,并向用户呈现应用状态。可以简单理解:一个界面就是一个Activity。

  • 生命周期

        Android 应用的多个 Activity 组成 Activity 栈,当前活动的Activity位于栈顶。当用户浏览、退出和返回应用时,应用中的实例会在其生命周期的不同状态间转换。
为了在 Activity 生命周期的各个阶段之间导航转换, Activity 类以下回调集: 

  1. onCreate():系统首次创建 Activity 时触发。执行基本的应用启动逻辑, 在 Activity 的整个生命周期内仅发生一次。
  2. onStart():显示界面,此时还不可以进行用户的交互
  3. onResume():可以与用户进行交互
  4. onPause(): Activity 不再位于前台,在用户处于多窗口模式时仍然可见,在内存不够时会被 kill 掉
  5. onStop():Activity 不再对用户可见
  6. onDestroy():在activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况
  7. onRestart():activity从停止状态重新启动时调用,其后调用onResume( )

下图显示了Activity的生命周期以及相关回调方法:

图片 1 Activity生命周期
 

  • 简单使用

1. Activity 的启动和关闭

// 启动 
startActivity(Intent i) // 启动其他Activity
startActivityForResult(Intent i, int requestCode) // 以指定的请求码启动其他Activity,且程序会获取新Activity返回结果
// 关闭
finish()    // 结束当前Activity
finishActivity(int requestCode) // 结束以startActivityForResult方法启动的Activity

// 举个例子:
// 点击MainActivity中的btn按钮,从当前MainActivity跳转到SecondActivity
btn.setOnClickListener(view -> {
    Intent i = new Intent(MainActivity.this, SecondActivity.class);
    startActivity(i);
});

2. Activity 之间的数据传递

// 采用 bundle 作为 Intent 的数据携带包传递数据
// Intent 方法
putExtra(Bundle data)     
Bundle getExtra()
putExtra(String name, XxxValue)
getXxxEstra(String name)
// Bundle 方法
putXxx(String key, Xxx value)
getXxx(String key)

二、Service

Service一直在后台运行,没有用户界面,可用于执行长期运行的操作。

  • 启动/关闭

1. 启动式:通过startService()启动,会一直运行,直到任务完成或调用stopService()。

startService(Intent service)
stopService(Intent service)

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

bindService(Intent service, ServiceConnection conn, int flags)
unbindService(Intent service)
  • 生命周期

        已启动的服务当其他组件调用 startService() 时,系统会创建该服务。然后,该服务会无限期运行,并且必须通过调用 stopSelf() 自行停止。其他组件也可以通过调用 stopService() 来停止服务。服务停止后,系统会将其销毁。

        绑定服务当其他组件(客户端)调用 bindService() 时,系统会创建该服务。然后,客户端通过IBinder接口与服务进行通信。客户端可以通过调用 unbindService() 来关闭连接。多个客户端可以绑定到同一服务,当所有客户端解除绑定时,系统会销毁该服务。服务无需自行停止。

图片 2 Service生命周期。左侧显示了使用 startService() 创建服务时的生命周期,右侧显示了使用 bindService() 创建服务时的生命周期。

三、BroadcastReceiver

        BroadcastReceiver本质上是一个全局监听器,用于监听系统或者应用发出的全局广播消息,可以实现系统中不同组件之间的通信。

  • 工作流程

(1)注册广播接收器

静态注册:由PackageManagerService解析AndroidManifest.xml并注册。

动态注册:通过Context.registerReceiver()注册到ActivityManagerService。

(2)发送广播

通过Context.sendBroadcast()发送广播,ActivityManagerService负责分发。

(3)分发广播

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

(4)处理广播

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

  • 广播分类

(1)Normal Broadcast 普通广播:完全异步,可以在同一时刻被所有接收者接受,消息传递效率高;

(2)Ordered Broadcast 有序广播:接收者根据预先声明的优先级依次接收(优先级声明在<intent-filter.../>元素的android:priority属性中,数值越大优先级越高),接收者可以终止Broadcast Intent的传播,也可以将数据传给下一个接收者。

四、ContentProvider

ContentProvider是不同应用程序之间进行数据交换的标准API,以某种Uri的形式对外提供数据,允许其他应用访问或修改数据,其他应用使用ContentResolver根据Uri去访问操作指定数据。

Uri 
content://org.crazy.providers.dictprovider/words
content://  默认协议
org.crazy.providers.dictprovider 指定provider
word 资源

Uri 是 ContentProvider 和 ContentResolver 进行数据交换的标识,三者关系如下图所示。 

图片 3 ContentProvider、 ContentResolver 和 Uri 之间的关系

参考文档:

Android 教程 | 菜鸟教程

Android四大组件详解(大白话版)_android 四大组件-优快云博客

Android四大组件详解1-阿里云开发者社区

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值