安卓入门系列-08四大组件之Activity

1.什么是Activity

Android提供的四大组件之一。它是一个界面的载体(内含各种控件),不妨理解为web开发中的html文件(含各种标签)。当然,Activity远远没有这么简单,不妨看一下源代码。作为一个继承的类,它的源码达到了7000行,这是由于Activity封装了很多方法给开发者使用。当然,初学者不需要知道这些底层的东西。

2.Activity的生命周期

这是官方参考文档里的图。

不难看出,当这个activity第一次创建出现时是oncreate方法调用了,直到这个Activity被销毁。当然,我们一般大量的刷新类型的业务处理是放在onresume这个方法实现。(因为create只会在activity创建时调用一次,除非销毁才会再次调用,这是开销比较大的,一般不这么做)

下面代码尝试调用所有的方法,明确生命周期。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码测试:

package com.zc.helloworld;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;



public class MainActivity extends AppCompatActivity {

    private Button btn;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("info","MainActivity onCreate()");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.e("info","MainActivity onStart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("info","MainActivity onResume()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.e("info", "MainActivity onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("info", "MainActivity onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("info","MainActivity onDestroy()");
    }


    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("info","MainActivity onRestart()");
    }


}

演示结果:

扫描二维码关注公众号,回复: 3435739 查看本文章

当初次打开App时,出现如下。

当home键最小化App时,出现如下。

当回到未被后台销毁的APP时,出现如下。

当退出且关闭App时,出现如下。

从什么的情况,不难看出生命周期的运转过程。

3.常用的Activity

在开发中,不可避免要写很多的Activity,但是为了方便,谷歌已经封装了很多实用的牵涉底层的Activity。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

代码测试:

package com.zc.helloworld;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;



public class MainActivity extends AppCompatActivity {

    private Button btn1,btn2,btn3,btn4;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
        context = this;
        btn1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }});
        btn2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivity(intent);
            }});
        btn3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT,"Hello World!");
                startActivity(intent);
            }});
        btn4.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }});
    }




}

演示结果:

4.Activity之间的数据交互 

一般用intent传递。(内存数据)

代码测试:

MainActivity.java(将这个Activity的textview数据传到下一个Activity)

package com.zc.helloworld;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class MainActivity extends AppCompatActivity {

    private Button btn1;
    private TextView tv;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = this;
        btn1 = (Button) findViewById(R.id.btn1);
        tv = (TextView) findViewById(R.id.tv1);
        btn1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context,Main2Activity.class);
                String data = (String) tv.getText();
                intent.putExtra("data",data);
                startActivity(intent);

            }});
    }




}

MainActivity2.java

package com.zc.helloworld;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class Main2Activity extends AppCompatActivity {
    private TextView tv;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        tv = (TextView) findViewById(R.id.tv2);
        Intent intent = getIntent();
        if(intent!=null){
            String data = intent.getStringExtra("data");
            tv.setText(data);

        }
    }
}

演示结果:

当然,更多类型,更加复杂的数据可以用Bundle绑定一起传递。

5.最后提一下

实际开发中必须要处理好Activity和context。

猜你喜欢

转载自blog.csdn.net/zhouchen1998/article/details/82944199
今日推荐