2020-12-01
作者:互联网
Android开发四大组件之Activity
1、定义:activity是一种可以包含用户UI界面的组件,主要用于和用户交互。
2、activity的生命周期
①onCreate() 在activity第一次被创建的时候调用。(一般用于初始化操作)
②onStart() 在activity由不可见变为可见的时候调用
③onResume() 在activity准备好和用户进行交互的时候调用,此时的activity一定位于返回栈的栈顶,并且处于运行状态。
④onPause() 在系统准备去启动或者恢复另一个activity的时候调用,通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度要快,不然会影响到新的栈顶activity的使用。
⑤onStop() 在activity完全不可见的时候调用,它和onPause()方法的主要区别在于,如果启动的新activity是一个对话框式的activity,那么onPause()方法会执行,该方法不会执行。
⑥onDestroy() 在activity被销毁之前调用,之后activity的状态变为销毁状态。
⑦onRestart() 在activity由停止状态变为运行状态之前调用,也就是activity被重新启动。
3、Activity生命周期体验
LifeCycleTest-Demo介绍:一共三个activity—MainActivity、SecondActivity、ThirdActivity、FourthActivity
MainActivity功能:跳转到SecondActivity、销毁本activity、隐式Intent跳转到FourthActivity
SecondActivity功能:返回MainActivity、跳转到ThirdActivity、销毁本activity
ThirdActivity功能:返回SecondActivity、销毁本activity
实验操作:(调用方法的顺序即写法先后顺序)
操作 | 调用方法 |
---|---|
启动app | onCreate()-1 onStart()-1 onResume()-1 |
销毁MainActivity | onPause()-1 onStop()-1 onDestroy()-1 |
跳转到SecondActivity | onPause()-1 onCreate()-2 onStart()-2 onResume()-2 onStop()-1 |
销毁SecondActivity | onPause()-2 onRestart()-1 onStart()-1 onResume()-1 onStop()-2 onDestroy()-2 |
返回MainActivity | onPause()-2 onRestart()-1 onStart()-1 onResume()-1 onStop()-2 onDestroy()-2 |
后面的跳转activity和销毁activity和上内容类似。
4、显示和隐式使用Intent穿梭activity(Intent用于跳转activity和activity间的数据交互)
代码备注:主Activity的配置
<activity android:name=".MainActivity">
<intent-filter>
<!--以下两行配置表示该activity为app主activity-->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
①显示
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
②隐式:通过指定action和category来选择启动哪个activity
AndroidManifest.xml文件中配置FourthActivity的内容如下
<activity android:name=".FourthActivity">
<intent-filter>
<action android:name="jump_fourthActivity" />
<!-- 下一行必须有,不管要不要自定义category,也可自定义category,一般不自定义,通过action来指定启动activity -->
<category android:name="android.intent.category.DEFAULT" /> <category android:name="MyCategory" />
</intent-filter>
</activity>
在MainActivity中添加如下内容 即可绑定按钮点击跳转FourthActivity
Intent intent1 = new Intent("jump_fourthActivity");
intent1.addCategory("MyCategory");
startActivityForResult(intent1,1);
注:紫色两行代码是对应的,当需要添加category来确认跳转到哪一个activity时这样写,一般不用。
5、activity间传递数据
①向下一个activity传递数据
如需MainActivity传递数据到SecondActivity
MainActivity中代码
可以绑定在按钮点击事件中
String data = "我要传递数据给下一个activity";
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
SecondActivity中代码
写在onCreate()方法中
Intent intent = getIntent();
String str = intent.getStringExtra("extra_data");
②返回数据给上一个activity
如需SecondActivity返回数据给MainActivity(用到另一个启动activity的方法startActivityForResult())
MainActivity中代码
可以写在按钮点击事件中
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
重写onActivityResult()方法
方法内的代码:
switch (requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnData = data.getStringExtra("return_data");
}
}
SecondActivity中代码
可以写在onCreate()方法中的一个按钮点击事件中
Intent intent = new Intent();
intent.putExtra("return_data","我要将数据返回给MainActivity");
setResult(RESULT_OK,intent);//该方法用于将数据返回给上一个activity
finish();
6、Activit的四种启动模式
使用android:lunchMode属性设置activity的启动模式
①standard
默认情况下,activity均是该模式,在该模式下,每当启动一个新的activity,它就会入栈并处于栈顶的位置。每次启动都会创建一个该activity的实例。
②singleTop
在该模式下的activity,启动该activity时,如果该activity位于栈顶,则直接使用该activity,不会重新创建新的实例。
③singleTask
在该模式下的activity,启动时系统首先会在返回栈中检查是否存在该activity的实例,如果有则直接使用,并把在这个activity之上的所有activity出栈,如果没有则创建一个实例。
④singleInstance
指定为该模式的activity会启用一个新的返回栈来管理这个activity。该模式主要用于多个程序共享同一个activity实例。
标签:12,SecondActivity,跳转,MainActivity,01,Intent,activity,2020,intent 来源: https://blog.csdn.net/XxwjxX/article/details/110429391