【安卓四大组件】

Activity

基本概念

Activity是一种可以包含用户界面的组件,主要用于和用户进行交互,每个Activity都是一个独立的界面。创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示,以此来为用户提供交互的入口。

生命周期

参考

四种状态:

  1. 运行状态(Active/Running):一个新 Activity 启动入栈后,它显示在屏幕最前端,处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态。
  2. 暂停状态(Paused):当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。
  3. 停止状态(Stopped):如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。
  4. 销毁状态(Killed):如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。

七个回调方法:

  1. onCreate():在Activity创建时调用,通常做一些初始化设置,不可见,只在Activity创建时执行一次。
  2. onStart():在Activity即将可见时调用,可见,在Activity中多次调用,不在前台,不可交互,初始化工作。
  3. onResume():在Activity获取焦点开始与用户交互时调用,在前台,开启动画和独占设备。
  4. onPause():在当前Activity被其它Activity覆盖或锁屏时调用。
  5. onStop():在Activity对用户不可见时调用。
  6. onDestory():在Activity销毁时调用。
  7. onRestart() :在Activity从停止状态再次启动时调用。

启动模式

每个Android应用都有一个任务栈,在栈顶的活动将会被执行。Android提供了四种主要的Activity启动模式,分别是standard、singleTop、singleTask和singleInstance。

通过在Mainfest.xml文件活动选项的android:launchMode属性来设置Activity的启动模式,各值对应模式如下:

  1. standard模式:每次启动该活动时,都会在栈顶创建一个新的实例。
  2. singTop模式:在启动活动时,如果栈顶活动是该活动的实例,则不再创建新的实例,而是复用该实例对象;反之,则创建一个新的实例。
  3. singTask模式:在启动活动时,如果任务栈中存在该活动的实例,则将其置于栈顶,同时,位于该Activity之上的所有Activity都将被移出栈,具有clearTop的效果;反之,则创建一个新的实例。
  4. singInstance模式:栈间复用,单一实例,在这种模式下Activity只能单独位于一个栈中,当再次启动这个Activity的时候不会再创建它的实例了,尽管它们不在同一栈中。可以理解为全局单例,这种模式使得不同应用可以共享一个Activity的实例。

Service

基本概念

Service 是一种用于在后台执行长时间运行的任务而不提供用户界面的应用组件。Service 可以在应用的前台或者后台执行任务,即使用户离开了应用。服务是用来处理不需要与用户交互而需要长期运行的操作,例如在后台播放音乐、执行文件下载等。

两种形式:

  1. 前台服务:显示一个持续的通知,这意味着用户清楚地知道正在运行的服务。这种服务用于用户积极参与的任务(如播放音乐)或对用户很重要的任务(如文件下载)。
  2. 后台服务:在后台执行的服务,用户感知不到。通常用于执行不需要用户交互的长时间运行任务,如数据同步、定期更新等。

生命周期

参考

方法:
onCreate(): 服务创建时调用。
onStartCommand(Intent intent, int flags, int startId): 每次通过 startService() 方法启动服务时调用。
onBind(Intent intent): 当其他组件想要与服务绑定时调用,需要返回一个 IBinder 对象,通过该对象组件可以与服务进行通信。
onUnbind(Intent intent): 当所有组件都与服务解除绑定时调用。
onDestroy(): 服务销毁之前调用。

两种启动方式

  1. startService():service通过其他组件调用startService()被启动,service会无限期地在后台运行,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它,当service被停止时,系统会销毁它。启动服务的组件(如Activity)与Service之间并没有直接的绑定关系,即服务的生命周期与启动它的组件无关。
  2. bindService():当其他组件调用bindService()来创建service,组件与服务建立绑定关系,并且可以通过一个IBinder接口和service进行通信,可以通过unbindService()方法来关闭这种连接,一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。

Broadcast Receiver

基本概念

广播接收器(简称广播接收器)是一个用来处理来自系统或应用发出的广播通知的组件。它可以对诸如设备启动完成、电池电量变化、短信接收等系统事件做出响应,也可以接收应用自定义的广播消息。它可以启动一个活动或服务来响应接收到的信息。

广播类型

  1. 标准广播:完全异步执行的广播,在广播发出之后,所有的广播几乎都会在同一时刻收到这条广播消息,无法被截断。
  2. 有序广播:同步执行的广播,在广播发出之后,同一时刻只会有一个广播接收器能够收到这条广播消息,当这个广播接收器中的逻辑执行完毕后,广播才会继续传递,优先级高的广播接收器先接收到消息,并且可以阶段正在传递的广播,后面的广播接收器就无法收到这条广播消息。

注册方式

  1. 静态注册:在 AndroidManifest.xml 中注册。不受任何组件生命周期的影响。
<receiver 
    //此广播接收者类是mBroadcastReceiver 
    android:name=".mBroadcastReceiver" > 
    //用于接收网络状态改变时发出的广播 
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter>
</receiver>
  1. 动态注册:在代码中注册,通常在 Activity 或 Service 中注册。它只在其宿主组件(如 Activity)存在时活跃。
    通过调用Context的registerReceiver()方法进行动态注册BroadcastReceiver
@Override
protected void onResume() {  
    super.onResume();  
    //实例化BroadcastReceiver子类 & IntentFilter  
    mBroadcastReceiver mBroadcastReceiver = new mBroadcastReceiver();  
    IntentFilter intentFilter = new IntentFilter();  
    //设置接收广播的类型  
    intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);  
    //调用Context的registerReceiver()方法进行动态注册  
    registerReceiver(mBroadcastReceiver, intentFilter);
}

注册广播后,要在相应位置销毁广播,即在onPause() 中unregisterReceiver(mBroadcastReceiver)

@Override
protected void onPause() {  
    super.onPause();  
    //销毁在onResume()方法中的广播  
    unregisterReceiver(mBroadcastReceiver);
}

Content Provider

基本概念

内容提供器主要用于在不同的应用程序之间实现数据共享的功能,可以选择只对哪一部分数据进行共享,从而保证程序中的隐私数据不会有泄漏的风险。content provider中的增删改查方法都接收URI对象作为参数。

URI:内容URI,给Content Provider中的数据建立了唯一标识符,可以指代数据表或表内的特定数据行,主要由两部分组成:authority和path。authority用于对不同的应用程序做区分,一般为了避免冲突,会采用程序包名的方法进行命名。path则用于对同一应用程序中不同的表做区分的,通常添加到authority的后面。然后在字符串的头部加上协议声明,例如内容URI:content://com.example.app.provider/table1,content://com.example.app.provider/table2。得到URI字符串之后,我们还需要将他解析成Uri对象才可以作为参数传入,使用Uri.parse()。

Content Provider:提供了一组API,允许应用查询或修改由Content Provider管理的数据,应用通过调用Content Provider提供的方法,如query(),insert(),delete(),update()等来执行操作。并且Content Provider通过URI来暴露数据。

实现过程

  1. 定义一个类,继承ContentProvider类,实现必要的方法:onCreate(), query(), insert(), delete(), update()和getType()。
  2. 在AndroidManifest.xml中声明:注册ContentProvider并且定义唯一的authority。
  3. 使用URI来访问数据

参考:Android基础知识——四大组件

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值