Android笔记之Activity

一.活动生命周期

共四种状态:运行,暂停,停止,结束

Android中 判断Activity是否在前台显示 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栈中,而且这个栈只能包含这一个活动。