Activity是Android四大组件(Activity、BroadcastReceiver广播接受者、service服务,Content Provider内容提供者)之一, 一个Activity是一个应用程序组件,提供一个屏幕(页面),用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。一个应用程序可以有多个Activity组成,当第一次启动应用程序的时候呈现给用户的那个activity通常为mainActivity。使用Activity可以实现多页面的应用程序。
一、创建一个Activity
1.1、首先创建一个类继承自Activity,并重写其中的onCreate方法。
1.2、在AndroidManifest.xml文件中配置这个Activity
<activity android:name=""></activity>
name中写你在步骤一种创建的Activity的完整类名。
1.3、在MainActivity中开启新创建的Activity。
1.3.1、通过显示意图开启Activity(通过制定具体报名和类名开启Activity)
// 创建一个Intent对象
Intent intent = new Intent(this,ResultActivity.class);
//开启Activity
startActivity(intent);
1.3.2、通过隐式意图开启Activity(通过指定一组动作或数据开启Activity,需要在配置文件中配置过滤器intent-filter)
//[1]创建意图对象 意图 :你想干一件什么事情
Intent intent = new Intent();
//[2]设置意图的action(动作)
intent.setAction(Intent.ACTION_CALL);
//[3]设置数据 data
intent.setData(Uri.parse("tel:"+119)); //给119打电话
//[4]开启activity 记得加上call_phone的权限
startActivity(intent);
两种开启Activity的异同和使用情况:
(1)显示意图更为安全(因为没有配置过滤器,别人不能够通过设置动作开启)
(2)隐式意图一般用作开启系统的应用界面
(3)显示意图一般用来开启自己程序的界面
二、Activity的生命周期
onStrat() 方法 当Activity变成可见的时候调用
onStop() 方法 当activity 不可见的时候调用
onResume()方法 当activity可以获取焦点的时候 当界面的按钮可以被点击了
onPause()方法 当失去焦点的时候调用 当按钮不了可以被点击的时候调用
onRestart()当界面重新启动的时候调用
即当Activity启动时会先调用onCreate方法,页面可见时调用onStart方法,页面获得焦点时(即可以被点击等)调用onResume方法,随后再依次取消,即页面不可被操作时调用onPause方法,不可见时调用onStop方法,销毁时调用onDestory方法。当页面有不可见变为可见时会调用onRestart方法。如果想实现一些诸如当页面可见时进行一些操作,Activity创建时进行一些操作等,直接重写上述方法即可。
三、Activity的四种启动模式
再看四种启动模式之前,先来了解一下任务栈的概念。任务栈是用来维护Activity的,打开一个Activity就将这个Activity放入任务栈,关闭一个Activit将这个Activity从任务栈出站。我们操作的Activity永远是任务栈的栈顶的Activity,当任务栈为空时,即退出这个应用程序。
standard
标准模式,不用配置,默认情况下就是这个模式。就是最普通的出入栈,创建一个Activity即放入栈顶,销毁就从栈中移除,会有多个相同Activity叠加。
singleTop
单一顶部模式。即当创建一个新的Activity时,如果任务栈的顶部就是这个Activity,直接启动(复用)这个Activity,不会创建新的Activity。例如A,B两个Activity,A是standard,B
为singleTop,如果按照A-B-B这样的顺序打开这两个Activity,实际打开的Activity只有A-B(即只会打开一次B)。singleTop的配置方法:在配置文件中activity节点下设置android:launchMode="singleTop"
singleTask
单一任务栈,当前的任务栈中只能有一个实例存在(只能有一个相同的Activity)。即当有一个新的Activity被创建时,去检查这个任务栈中有没有这个Activity的实例存在,如果有实例,则直接服用这个实例,并将这个实例上面的所有Activity销毁。如下所示,每个字母代表一个Activity,上面是进行的操作,下面是实际打开的Activity:
操作:C1->C2 C1->C2->C3 C1->C2->C3->C2 C1->C2->C3->C2->C3->C1 C1->C2->C3->C2->C3->C1-C2
实际:C1->C2 C1->C2->C3 C1->C2 C1->C2->C3->C1 C1->C2
配置方式:在配置文件中activity节点下设置android:launchMode="singleTask"
singleInstance
比较特殊的启动模式,当用这种模式启动一个Activity时,它会新建一个任务栈,这个任务栈中只允许放这一个Activity。例如一下A,B,C三个Activity,它们可以互相启动,其中A,B是标准模式(standard),C是singleInstance模式。执行A->B->C->A的操作,其中A、B在一个任务栈中(A、B、A的顺序),C单独在一个任务栈中,并且A,B所在的任务栈在前面。如果最后放入的是C,则C的任务栈在前面(先执行前面任务栈的,同任务栈先执行栈顶的)。配置方式:在配置文件中activity节点下设置android:launchMode="singleInstance"