我对 Activity 的理解
Table of Contents 我对 Activity 的理解一、活动的创建:声明到布局二、对多个活动的理解:一、怎么启动另一个活动二、怎么向另一个活动传递数据三、后一个活动向前一个活动返回数据。三、活动的生命周期:四、对于onCreate函数的savedInstanceState参数的理解:五、我对活动的启动模式的理解:怎么获得全局 Context ?
一、活动的创建:声明到布局
二、对多个活动的理解:
一、怎么启动另一个活动
使用Intent可以启动另一个活动。
Intent intent = new Intent(MainActivity.this, SecondAvtivity.class);
startActivity(intent);
二、怎么向另一个活动传递数据
传递数据只需要将数据放到Intent中就可以了。我们在上面的代码上加几行
Intent intent = new Intent(MainActivity.this, SecondAvtivity.class);
// 使用键值对在Intent中,放入你要传递的数据
String data = new String();
intent.putExtra(key, data);
...
startActivity(intent);
然后在SecondActivity中读出数据就可以使用了
String getData = getIntent().getStringExtra(key);
三、后一个活动向前一个活动返回数据。
需要使用回调函数才能向上一个活动返回数据。
首先,需要将MainActivity中的代码中的startActivity()函数改成startActivityForResult()函数。表示当前活动需要SecondActivity在销毁时返回数据。我们继续在上面的代码中进行修改。
Intent intent = new Intent(MainActivity.this, SecondAvtivity.class);
// 使用键值对在Intent中,放入你要传递的数据
String data = new String();
intent.putExtra(key, data);
...
startActivityForResult(intent, 1);
startActivity() 函数除了需要一个Intent,还需要一个参数,就是请求码,保证返回的数据是你需要的数据。
然后,我们需要重写活动中的 onActivityResult() 函数对返回的数据进行处理。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case 1:
if(resultCode == RESULT_OK) {
String returnedData = data.getStringExtra(key);
...
}
break;
default:
}
}
最后就是在SecondActivity中在适当的时候使用setResult()函数返回数据,退出活动。
Intent intent = new Intent();
String data = new String();
intent.putExtra(key, data);
...
setResult(RESULT_OK, intent);
finish(); //退出活动
在setResult()函数中第一个参数RESULT_OK是一个常量,表示返回的结果码。在MainActivity中有onActivityResult()函数中的第二个参数就是得到返回数据的结果码,表示返回数据是否成功。
三、活动的生命周期:
onCreate():活动从无到有创建时会调用这个函数
onStart():活动从不可见到可见时,调用。
onResume():活动位于活动栈的栈顶时调用。
onPause():当活动部分隐藏时,调用
onStop():当活动完全不可见时调用
onDestroy():当活动被销毁时调用
onRestart():当活动重新启动时
四、对于onCreate函数的savedInstanceState参数的理解:
主要用在当活动处于onStop状态时,系统可能会回收这个活动。如果回收的话,那这个活动中的数据就会消失。所以,为了解决这个问题,就要用到这个参数。
首先我们要重写活动中的onSaveInstanceState(Bundle outState)这个方法。这个方法的主要作用就是将你认为可能丢失的数据保存到outState这个Bundle中。因为它可以保证会在活动被销毁之前调用。
然后,就是在重新创建活动时,onCreate(Bundle savedInstanceState)中的savedInstanceState参数也是Bundle类型,对,它就上次活动销毁时存储的数据。使用相同方法取出即可。
五、我对活动的启动模式的理解:
有一个活动栈管理所有的活动,活动启动时,就会放入栈顶,
有四种启动模式:
- Standard:启动一个新活动时,无论栈顶是哪一个活动,都重新创建活动,压入栈中。
- SingleTop:如果启动的新活动是栈顶活动,就直接使用栈顶活动,否则,就重新创建活动,压入栈中。
- SingleTask:如果启动的新活动是栈中的活动,就弹出栈中该活动上面的活动,直接该活动成为栈顶活动,否则,创建新活动压入栈中。
- SingleInstance :当新活动以此模式启动时,重新创建一个活动栈,将新活动压入新活动栈中。
怎么获得全局 Context ?