Android四大组件之活动(Activity)

1. 何为活动

活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互。活动可以嵌套,一个活动中可以包含另一个活动。几乎所有的应用程序中都包含活动。

2. 活动的基本用法

2.1 创建活动

在AndroidStudio中新建一个Empty Activity,代码如下:

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

任何活动都要重写Activity类的onCreate()方法,这里系统已经自动写好了。

2.2 加载布局

创建一个Layout后,需要在活动中调用setContentView()方法来加载布局,一般传入布局的id,引用布局的方式为:R.layout.first_layout,这样就可以得到first_layout.xml文件的布局id,传入setContentView()方法中即可。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
    }

2.3 注册活动

活动创建完成之后,需要在AndroidManifest文件中进行注册才能生效。

<application
     ...
    <activity android:name=".FirstActivity">
		<intent-filter>
        	<action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
    	</intent-filter>
	</activity>
</application>

活动的注册声明放在< application >标签内,在< activity >标签内用android:name来指定具体注册的活动名。如果要使程序运行,还要为其配置主活动,需要在< activity >标签内加入< intent-filter >标签,并添加主活动声明。

3. 使用Intent实现活动跳转

Intent是Android程序中各组件进行交互的重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。一般被用于启动活动、启动服务、发送广播等场景。Intent分为显式Intent和隐式Intent,下面通过使用这两种类型的Intent来启动活动。

3.1 使用显式Intent

Intent中有多个构造函数的重载,其中一个是Intent(Context packageContext,Class<?> cls)。Context参数要求提供一个启动活动的上下文,第二个参数class则是指定想要启动的目标活动。

Intent intent=new Intent(FirstActivity.class,SecondActivity.class);
startActivity(intent);

这里构建出一个Intent,用于在FirstActivity的基础上打开SecondActivity这个活动,然后调用startActivity()方法来执行这个Intent。
由于用这种方式启动活动的意图非常明显,故称之为显式Intent

3.2 使用隐式Intent

隐式Intent不明确指出要启动哪一个活动,而是指定一系列action和category等信息,交由系统判断合适的活动。
下面修改AndroidManifest文件中内容,指明SeceondActivity能够响应的action和category。

<activity android:name=".SecondActivity">
	<intent-filter>
		<action android:name="com.example.activitytest.ACTION_START" />
		
		<category android:name="android.intent.category.DEFAULT" />
	</intent-filter>
</activity>

< action >标签指明当前活动能够响应com.example.activitytest.ACTION_START这个action,< category >标签更精确地指明Intent可能携带的附加信息,只有二者都匹配上,这个活动才能响应Intent。

Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent)

这里在Intent构造函数中传入一个字符串,表明想要启动能响应com.example.activitytest.ACTION_START这个action的活动。如果不指定category内容,在调用startActivity()方法时会自动添加默认category至Intent中。也可以调用addCategory()方法来添加category。

3.3 向下一个活动传递数据

Intent除了可以启动一个活动外,还能在启动活动的时候传递数据。具体思路为:调用putExtra()方法将数据以键值对的形式暂存在Intent中,启动另一个活动后,再将数据取出。
存data

String data="hello world!"
Intent intent=new Intent(FirstActivity.class,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);

取data

Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");

首先调用getIntent()方法获取用于启动活动的Intent,然后调用getStringExtra()方法来获取data,传入相应的键值。如果要取的是整型数据,就调用getIntExtra()方法。

3.4 返回数据给上一个活动

Activity中有个**startActivityForResult()**方法也是用来启动活动的,并在活动销毁时能够返回一个结果给上一个活动。该方法有两个参数,第一个是Intent,第二个是请求码,用于在之后的回调中判断数据来源。

Intent intent=new Intent(FirstActivity.class,SecondActivity.class);
//调用startActivityForResult()方法来启动intent
startActivityForResult(intent,1);

上面的代码是在FirstActivity中调用startActivityForResult()方法启动SecondActivity,startActivityForResult()方法中的请求码只要是唯一值就可以了,这里传入了1。

在SecondActivity中添加返回数据的逻辑如下:

Intent intent=new Intent();
intent.putExtra("data_return","hello firstactivity");
setResult(RESULT_OK,intent);
finish();

首先创建一个intent用于传递数据,并把要传的数据存放其中。然后调用专门用于向上一个活动返回数据的setResult()方法,该方法有两个参数,第一个用于向上一个活动返回处理结果,一般使用RESULT_OK或者RESULT_CANCELED这两个值,第二个参数是把带有数据的intent传递回去,最后调用finish()方法销毁活动。

在活动销毁后,会回调上一个活动即FirstActivity中的onActivityResult()方法,因此需要重写该方法获取数据。

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
	switch(requestCode){
		//判断数据来源,请求码为1
		case 1:
			//处理结果是否成功
			if(resultCode==RESULT_OK){
				String returnData=data.getStringExtra("data_return");
			}
			break;
		default:
	}
}

4. 活动的生命周期

下图为活动从创建到销毁的周期图,参考菜鸟教程-Android活动。Activity类是ContextThemeWrapper类的子类,包含一系列方法,如onCreate()、OnStart()、OnResume()等等,分别在活动的各个时期调用。
Alt
每个活动在其生命周期中最多可能会有四种状态。分别为运行状态、暂停状态、停止状态、销毁状态。活动在不同状态会调用不同的方法,具体方法如下:

onCreate():在活动第一次创建时调用
onStart():在活动为用户可见时被调用
onResume():在应用程序与用户开始可交互的时候调用
onPause():当前活动将要被暂停,上一个活动将要被恢复时调用
onStop():当活动不在可见时调用
onDestroy():	当活动被系统销毁之前调用
onRestart() :当活动被停止以后重新打开时调用
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值