活动Activity是一种可以包含用户界面的组件,主要用于和用户进行交互;
所有的活动都要在AndroidManifest.xml中进行注册才能生效;
销毁一个活动:finish()
Intent:显式Intent&隐式Intent
显式Intent:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
隐式Intent:
每个Intent中只能指定一个action,但却能指定多个category。
向下一个活动传递数据:
读:intent.putExtra(“extra_data”,data);
取:getIntent().getStringExtra(“extra_data”);
PS:getStringExtra()/getIntExtra()/getBooleanExtra()
返回数据给上一个活动:
FristActivity.java
startActivityForResult(Intent,请求码)
请求码用于在之后回调中判断数据的来源。
onActivityResult(requestCode,resultCode,data)
SecondActivity.class:
setResult(RESULT_OK|RESULT_CANCELED,Intent);
活动的生命周期
返回栈
Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合。这个栈也称为返回栈(先进后出的数据结构);系统总是显示处于栈顶的活动给用户。
活动状态:运行状态 暂停状态 停止状态 销毁状态
运行状态:
活动位于返回栈栈顶时;
暂停状态:
活动不再栈顶位置但仍然可见时;
停止状态:
活动不在处于栈顶位置,并且完全不可见时;
(系统仍然会为这种活动保存相应的状态和成员变量,当其他地方需要内存时,处于停止状态的活动有可能会被系统回收)
销毁状态:
活动从返回栈中移除后;
活动的生存期
完整生存期:onCreate()——onDestroy()
一般情况下,一个活动会在onCreate()中完成各种初始化操作,而在onDestroy()中完成释放内存的操作。
可见生存期:onStart()——onStop()
活动对于用户总是可见的,即便有可能无法和用户进行交互。
前台生存期:onResume()——onPause()
活动总是处于运行状态,可以和用户进行交互。
活动的生命周期中7个回调方法介绍:
1.onCreate():活动第一次被创建的时候调用。完成活动的初始化操作(加载布局,绑定事件);
2.onStart():活动由不可见变为可见时调用;
3.onResume():活动准备好和用户进行交互时调用。(活动处于运行状态);
4.onPause():准备启动或恢复另一个活动时调用;
5.onStop():活动完全不可见是调用;
PS:如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法不会执行。
6. onDestroy():活动被销毁之前调用
7.onRestart():活动由停止状态变为运行状态之前调用,即活动被重新启动;
补充:在活动被回收前保存临时数据
onSaveInstanceState():这个方法可以保证活动被回收前一定会被调用
在活动中添加如下代码就可以将临时数据进行保存:
@Override
Protected void onSaveInstanceState(Bundle outState){
Super.onSaveInstanceState(outState);
String tempData = “something you just typed”;
outState.putString(“data_key”,tempData);
}
活动的启动模式:standard singleTop singleTask singleInstance
standard(默认的启动模式)
在该模式下,每当启动一个新的活动,就会在返回栈中入栈,并处于栈顶位置。(系统不在乎该活动是否已经在返回栈中,每次启动都会创建该活动的一个新实例)
singleTop
在该模式下,如果活动已经在栈顶,则可以直接使用它,不会在创建新的活动实例。
<activity
android:launchMode=“singleTop”>
</activity>
singleTask
该模式下,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,没有则创建一个新的活动实例。
singleInstance
在该模式下,会有一个单独的返回栈来管理这个活动,不管是哪一个应用程序来访问这个活动,都共用同一个返回栈,(共享活动实例)