Android笔记之Activity
一.活动生命周期
共四种状态:运行,暂停,停止,结束
如图中总共有7中方法:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
}
@Override
protected void onStart()
{
super.onStart();
System.out.println("onStart");
}
@Override
protected void onResume()
{
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause()
{
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop()
{
super.onStop();
System.out.println("onStop");
}
@Override
protected void onDestroy()
{
super.onDestroy();
System.out.println("onDestroy");
}
@Override
protected void onRestart()
{
super.onRestart();
System.out.println("onRestart");
}
当应用程序处于不可见,则为停止状态。当应用程序处于半透明,则处于暂停状态。
二.Activity跳转和值传递
1.如何启动Activity?
1)新建一个类,扩展自Activity。
2)在AndroidManifest.xml中添加Activity,可在图形化界面的Application中添加,设置名字。
3)新建对应的xml文件,并在activity中用setContentView(R.id.Aty1);来与布局绑定。
4)可以在MainActivity添加按钮来启动活动。
5)用intent启动
public class MainActivity extends Activity
{
private Button btnStartAty1;
private TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvOut = (TextView) findViewById(R.id.tvOut);
btnStartAty1 = (Button) findViewById(R.id.btnStartAty1);
btnStartAty1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, Aty1.class);
//这里需要写成MainActivity.this,只写this只访问到View.OnClickListener这个内部类
startActivityForResult(i);
}
});
}
2.如何关闭Activity?
用finish();方法关闭。
3.如何传递数据给另外一个Activity?
方法一:Intent用putExtra直接携带数据,如: i.putExtra(“txt”, “Hello Aty1”);
在另外一个Activity中用getIntent().getStringExtra(“txt”);来获取数据,如tvOut.setText(getIntent().getStringExtra(“txt”));
方法二:用Bundle传递比较复杂的数据
如:
Bundle data = new Bundle();
data.putString("txt", "Hello Aty1");
i.putExtras(data);
在接收的A ctivity中如下接收
Bundle data = getIntent().getExtras();
String txt = data.getString("txt");
tvOut.setText(txt);
如果需要接收的Activity传回数据
则需要用startActivityForResult(Intent intent, int requestCode);来启动Activity. intent用来在活动之间传递数据。requestCode是一个整数请求码,用来标明父活动的一个请求码。
接收的那一端需要写
Intent i = new Intent();
i.putExtra("result", "Hello MainActiviy");//第一个参数我字符串的名字叫result,内容为Hello MainActiviy
setResult(0, i);//0位startActivityForResult中的0对应
然后在主程序中从重写的onActivityResult(int requestCode, int resultCode, Intent data)方法来接收,requestCode为在startActivityForResult(Intent intent, int requestCode)中的请求码,resultCode为子活动通过setResult方法传入的一个返回码,一般为Activity基类中定义好的两个整型常量,RESULT_CANCELED和RESULT_OK. data为子活动传回来的数据。
如:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String result = data.getStringExtra("result");
tvOut.setText(result);
}
三.Activity的启动模式
1.standard模式
在同一个任务栈中实现多个Activity实例,界面会显示栈顶的实例。
2.singleTop模式
创建intent的时候栈顶有该模式的实例,则不会创建新实例,而是将intent传送给该实例。
3.singleTask模式
只能创建一个实例
4.singleInstance模式
Activity会在一个单独的Task栈中,而且这个栈只能包含这一个活动。