Activity lifecycle:step three(生命周期方法详解)

这里通过使用一个简单的例子来解释activity的生命周期方法的使用。这个简单的例子只包括两个activity:MainActivity和SecondActivity,以此来实现activity之间的转换。
下面给出这两个activity的Java源文件:
MainActivity:

package com.weigenshang.activitydemo;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Button button;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.out.println("MainActivity中调用onCreate()");
        setContentView(R.layout.activity_main);
//      获取代表button的对象
        button = (Button)findViewById(R.id.myButton);
        textView = (TextView)findViewById(R.id.mytextview);
        textView.setText(R.string.textview1);
        button.setText(R.string.button);
//        生成监听器对象
        ButtonListener buttonListener = new ButtonListener();
//       为button绑定监听器对象
        button.setOnClickListener(buttonListener);

    }
//    定义一个内部类,且实现接听器接口
    class ButtonListener implements View.OnClickListener{
//  实现该监听器接口,需要重写onClick()方法
    @Override
    public void onClick(View v) {
//        生成一个intent对象
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        MainActivity.this.startActivity(intent);

    }
}

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("MainActivity中调用onStart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("MainActivity中调用onResume()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("MainActivity中调用onStop()");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("MainActivity中调用onPause()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("MainActivity中调用onDestroy()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("MainActivity中调用onResume()");
    }
}

再给出SecondActivity的Java源文件:

package com.weigenshang.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity {
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        System.out.println("SecondActivity中调用onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondactivity);
        textView  = (TextView)findViewById(R.id.mytextview);
        textView.setText(R.string.textView2);
    }
    protected void onStart(){
        super.onStart();
        System.out.println("SecondActivity中调用onStart()");
    }
    protected  void onResume(){
        super.onResume();
        System.out.println("SecondActivity中调用onResume()");
    }
    protected void onPause(){
        super.onPause();
        System.out.println("SecondActivity中调用onPause()");
    }
    protected  void onDestroy(){
        super.onDestroy();
        System.out.println("SecondActivity中调用onDestroy()");
    }
    protected  void onRestart(){
        super.onRestart();
        System.out.println("SecondActivity中调用onRestart()");
    }
    protected  void onStop(){
        super.onStop();
        System.out.println("SecondActivity中调用onStop()");
    }
}
  • 当启动这个小的应用程序时,主activity(即MainActivity)被创建并显示如下图所示:

    MainActivity显示

且在logcat(已经设置过滤器)可以看到这样的输出:

这里写图片描述

即在创建这个新的activity时,android操作系统先后调用了onCreate(),onStart(),onResume()方法。

onCreate()方法:在系统第一次创建一个activity时被调用。在这个方法内,可以设置该activity使用的布局文件,也可以给控件绑定监听器等等。在调用完该方法后,系统随即迅速地调用onStart()方法。

onStart()方法:在activity即将被用户可见时被调用,调用完该方法后,则activity对用户可见。调用完该方法后,系统随即迅速地调用onResume()方法。

onResume()方法:在activity即将可以和用户进行交互时被调用,调用完后则activity获得用户焦点,可以和用户进行交互。

注意:这三个方法是以中间时间间隔很短的方式依次被调用的即:被创建出来后马上就可以被用户可见,可见后马上就可以和用户进行交互。

  • 当点击MainActivity中的按钮时,则启动到下一个activity如图所示:

这里写图片描述

并且logcat中可以看到这样的输出:

这里写图片描述

onPause()方法:当即将启动另一个activity时被调用,也就意味着这个activity将要被暂停。在这个方法内应该将当前activity中的操作的数据保存起来,方便返回的时候读取数据恢复原来的activity。有趣的是当手机自动锁屏时,也会调用当前activity的onPause(),且随后会调用onStop().因为其当前activity不可见了。

然后是依次调用SecondActivity的onCreate(),onStart(),onResume()方法来启动SecondActivity并使其获得用户焦点。

onStop()方法:当activity对用户不可见时被调用。因为SecondActivity已经完全覆盖了MainActivity即MainActivity对用户不再可见,所以调用MainActivity的onStop()方法,调用完该方法后activity就处于停止的状态。

注意:启动一个新的Activity时应该先onPause()原来的activity并保存其中的数据;要注意的是当新启动的activity没有完全覆盖掉原来的activity时,比如弹出的是对话框时,这时上一个activity就不会调用onStop()方法

  • 再次按返回按钮返回到MainActivity时,这时logcat中的输出的内容如图所示

这里写图片描述

返回到上一个activity,要先把当前的activity暂停即调用当前activity的onPause(),

再调用onRestart()重启已经存在的处于stop状态的MainActivity,再依次调用onStart(),onResume()使MainActivity获得用户焦点,

此时SecondActivity已经被完全覆盖,则调用其onStop(),然后就调用onDestroy()销毁SecondActivity,以节约内存空间。当再次启动SecondActivity时,还需要再次调用onCreate()。

注意:经常是在一个activity获得用户焦点之后就会调用上一个activity的onStop(),因为上一个activity已经是不可见的了;从当前activity返回到上一个activity时,当前activity就会被销毁,下次启动时会重新建立

简要的描述方法的使用:

启动第一个activity:

  • onCreate():创建第一个activity
  • onStart():使activity可见
  • onResume():获得用户焦点

启动另一个activity:

  • onPause():暂停当前activity并保存数据,
  • onCreate():创建第二个activity
  • onStart()
  • onResume()
  • onStop():因为第一个activity已经被完全遮挡了,所以调用第一个activity的onStop()

返回到第一个activity:

  • onPause():暂停第二个activity
  • onRestart():重启第一个activity
  • onStart()
  • onResume()
  • onStop():第二个activity被完全遮挡
  • onDestroy():销毁第二个activity
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值