Android_activity 生命周期

Posted HJ0101

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android_activity 生命周期相关的知识,希望对你有一定的参考价值。

android_activity 生命周期

  activity是Android四大组件之一,每一个activity都有自己的生命周期,就像每一个人一样会经历

      出生-----学会行走,交流------健康------生病------痊愈------健康-------死亡

  对于activity的理解,Android官网提供了这样一张图:

  

  onCreate:activity第一次创建

  onStart:用户可以看见activity,但还不能点击操作

  onResume:获取焦点,可以进行点击操作

  Activity is Running:activity正常运行

  onPause:被暂停

  onStop:停止运行

  onDestroy:被销毁

  onRestart:重新运行

流程说明:onPause→onResume  activity没有完全被另一个activity覆盖,重新获取焦点,恢复可操作状态

    onStop→onRestart→onStar :第一个activity完全被第二个activity覆盖时,再次返回第一个activity,由不可见转为可见

    onStop→onCreate  进程被杀死时执行流程

activity生命周期:就像走楼梯一样是一阶一阶的

  

  

activity之间数据的传递:

  现在有activityA和activityB两个activity界面

  A为主界面,B界面需经过A界面跳转

  当由A界面跳转B界面时:A如何向B传递数据,以及B界面如何接受A界面传递过来的数据

  主要使用Intent类进行传递,如下代码,有详细注解

  A界面Java代码

public class MainActivity extends AppCompatActivity {
    private TextView textView,textView1;
    public static final String TEXTVIEW_2 = "textview2";
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: ");
        final Book book = new Book("西游记","吴承恩");
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, Second_activity.class);
                //1.直接使用intent传输数据
//                intent.putExtra(TEXTVIEW_2,"我是第二个activity");
                //2.使用bundle传输数据
                /*Bundle bundle = new Bundle();
                bundle.putString(TEXTVIEW_2,"我是使用bundle创建的第二个activity");
                intent.putExtra(BUNDLE,bundle);*/
                //3.传递Serializable对象
                intent.putExtra("name",book);
                //参数2:发送的请求 int 类型
                startActivityForResult(intent,999);

            }
        });
        findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,Dialog.class);
                startActivityForResult(intent,0);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        textView = findViewById(R.id.textView2);
        super.onActivityResult(requestCode, resultCode, data);
        if((requestCode == 999) && (resultCode == 12)){
            if (data != null){
                textView.setText(data.getSerializableExtra("textView1").toString());
            }
    }
}

B界面Java代码:

public class Second_activity extends AppCompatActivity {
    public static final String TEXTVIEW_1 = "textview1";
    TextView textView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        textView = findViewById(R.id.textView);
        //接收使用intent传递的数据
        if(getIntent() != null){//判断是否为空,容易出现空指针异常

            textView.setText(getIntent().getSerializableExtra("name").toString());
        }
        //接收使用bundle传递的数据
       /* if(getIntent() != null){
            Bundle bundle = getIntent().getBundleExtra(MainActivity.BUNDLE);
            if (bundle != null){
                textView.setText(bundle.getString(MainActivity.TEXTVIEW_2));
            }
        }*/
        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.putExtra("textView1",new Book("水浒传","施耐庵"));
                //参数1:请求回应
                setResult(12,intent);
                finish();
            }
        });
    }
    //重写返回键
    @Override
    public void onBackPressed() {

//        super.onBackPressed();//会自动调用finish方法,需要注释掉
        Intent intent = new Intent();
        intent.putExtra("textView1",new Book("水浒传","施耐庵"));
        //参数1:请求回应 int 类型
        setResult(12,intent);
        finish();
    }
}

Dialogactivity:

1.创建Dialogactivity继承Activity类

2.在manifeste中修改DialogActivity的主题风格,标题

<activity
            android:name=".Dialog"
            android:label="请输入手机号码"
            android:theme="@style/Theme.AppCompat.Dialog"
            >

3.主activity启动DialogActiv,并发送数据传递请求

findViewById(R.id.button6).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,Dialog.class);
                startActivityForResult(intent,0);
            }
        });

4.DialogActivity传回数据

public class Dialog extends AppCompatActivity {
    private EditText editText;
    private static final String TAG = "Dialog";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog);
        editText = findViewById(R.id.editText);
        findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Dialog.this,MainActivity.class);
                intent.putExtra("name",editText.getText().toString());
                Dialog.this.setResult(RESULT_OK,intent);
                Dialog.this.finish();
            }
        });
    }
}

5.主activity接收数据onActivityResult方法中

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        textView1 = findViewById(R.id.textView3);
        if((requestCode == 0) && (resultCode == RESULT_OK)){
            if (data != null){
                textView1.setText(data.getStringExtra("name"));
            }

        }
    }

 

 activity的每一个生命周期都有它存在的意义,在什么阶段要进行什么操作,只需在它对应的生命周期方法中执行相应的代码即可~

  

  

 

以上是关于Android_activity 生命周期的主要内容,如果未能解决你的问题,请参考以下文章

调用 replace() 时片段的生命周期是啥?

Android片段生命周期:onResume调用了两次

在不存在的片段上调用片段生命周期和 onCreate 的问题

导航上的片段生命周期重叠

Android 片段生命周期

关于片段生命周期,何时调用片段的 onActivityResult?