Android应用四大组件之Activity

Android App开发四大组件之Activity使用
Views: 142
1 0
Read Time:1 Minute, 3 Second

Activity是Android APP开发的基础组件之一,一个Activity通常就是一个独立的窗口,作为UI交互的承载体,通常会填满整个屏幕,在该屏幕内去实现差异化的交互区域,基本上我们的所有界面都是基于Activity去实现的,在实现这样的界面时,我们需要继承Activity类,并覆写如下接口:

1. onCreate(Bundle):用于初始化activity,在初始化时我们可以通过setContentView(int)加载layout资源

2. onPause():当用户停止交互时,在onPause中需要将用于操作的行为转化为对应的数据进行保存(通常是通过contentprovider进行存储)

在接触到上述接口时,我们需要了解Activity中的生命周期(lifecycle),生命周期是Activity中非常重要的一个部分,是必须要掌握的。

生命周期

当用户浏览页面、退出和返回到应用时,应用中的Activity会在不同的状态间进行切换,这些状态我们也称其为生命周期。Activity拥有自己的生命周期,进入到每个生命周期都会有相应的回调。如下所示:

针对Activity的生命周期,其中的部分关键说明如下:

onCreate():该回调会在系统首次创建Activity时触发,Activity会在创建后进入已创建状态,开发者必须要覆写onCreate方法,并在该方法内执行应用的初始化逻辑,该逻辑在Activity的整个生命周期中只能发生一次,当其他生命周期感知型组件与Activity相绑定时,在onCreate回调触发时这些组件会收到ON_CREATE事件。

onStart():当 Activity 进入“已开始”状态时,系统会调用此回调。onStart() 调用使 Activity 对用户可见,因为应用会为 Activity 进入前台并支持互动做准备,当onStart回调触发时,与Activity生命周期相关联的其他组件将会接收到ON_START事件。onStart回调会非常快地结束,并进入已恢复状态。

onResume():Activity会在进入已恢复状态时来到前台,同时触发onResume回调,该状态是应用与用户互动的状态。该状态下与Activity生命周期相关联的其他组件将会接收到ON_RESUME事件。

onPause():Activity在onResume状态下发生中断事件时,会进入到已暂停状态,此时会触发onPause回调,系统会视为这是用户要离开该Activity的第一个标志;此时Activity不会再位于前台。该状态下与Activity生命周期相关联的其他组件将会接收到ON_PAUSE事件。

onStop():当Activity对用户不可见时,表明该activity已进入停止状态,此时将会触发onStop回调,在onStop方法中,应用应释放或调整在应用对用户不可见时的无用资源,并对相关数据进行存储。但Activity对象不会消失,会继续驻留在内存中,并负责维护所有状态和成员信息,但不会附加到窗口管理器。在Activity恢复后,Activity会重新调用这些信息。

在onStop状态下,Activity要么返回与用户互动,要么结束运行并消失。如果Activity返回,将触发onRestart回调。

onDestroy():在销毁Activity前,系统会触发onDestory回调,系统调用此回调的原因可能是由于用户彻底退出APP或者系统由于电源管理等限制调用finish,也有可能是配置变更导致系统暂时销毁Activity。

配置清单

当我们需要使用Activity时,我们需要在应用清单中进行配置。

首先需要对Activity进行声明,这将告诉系统关于Activity的一些基础信息,Activity Manager中也会获取到这些信息。当我们在应用清单中对Activity进行声明时,我们需要使用activity元素,其作为application的子元素,形式如下:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

在activity元素中,必须的属性为android:name,用于指定该activity的名称,一般我们在定义activity的名称时包含两种写法,写法一如“com.example.application.ExampleActivity”,此时该activity在整个系统中的名称即是全局确定且唯一的;写法二如“.ExampleActivity”,此时该activity的名称将与application的名称相绑定,如application的名为com.exampleApplication,则该activity的全名为com.exampleApplication.ExampleActivity;

启动模式

Activity存在不同的启动模式,其启动模式我们可以在应用清单文件AndroidManifest.xml中通过activity属性android:launchMode,当前支持的可选值包括:standard、singleTop、singleTask、singleInstance、singleInstancePerTask;

这些模式分为两大类,其中standard与singleTop是一类,而singleTask、singleInstance与singleInstancePerTask是一类。以上这些模式的区别如下:

standard模式:默认模式,当activity以这种模式加载时,每当我们启动一个新的活动,必定会构造一个新的activity实例放到栈顶,不管这个activity是否已经存在于返回栈中;

singleTop模式:如果一个以singleTop模式启动的activity的实例已经存在于返回桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中;如果该activity的实例不在返回栈的栈顶,那么它的行为与standard模式是一致的,即会构建一个新的activity实例;

singleTask模式:这种模式下,每次启动一个activity时,系统首先会在返回栈中检查是否存在该活动的实例,如果存在,则直接使用该实例(会调用实例的onNewIntent()方法),并把这个活动之上的所有活动统统清除;如果没有发现就会创建一个新的活动实例;

singleInstance模式:总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity的实例存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例。其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

singleInstancePerTask模式:该activity只能作为任务的根activity,作为创建该任务的第一个activity运行,在该任务中该activity只有一个实例,但是在不同的任务中可以多次实例化。

数据交换

一般在Activity中考虑到的数据交互分为三类:

  • 一类是Activity与其他应用组件之间的信息交换,一般我们会通过Intent进行信息交换
  • 一类是Activity与系统之间的信息交换,一般我们会通过Context进行
  • 一类是Activity与应用自身的内部信息交换,此时我们一般会通过content provider进行信息交换

更多内容后续补充……

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %
FranzKafka95
FranzKafka95

极客,文学爱好者。如果你也喜欢我,那你大可不必害羞。

文章: 86

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CNCN