热门IT资讯网

简析Activity生命周期

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,Activity和所有的生物一样,也有生老病死这一说,这就是我们将要了解的Activity生命周期的概念。一:生命周期Activity的生命周期如下图所示:Activity的生命周期分为四个阶段(1)

Activity和所有的生物一样,也有生老病死这一说,这就是我们将要了解的Activity生命周期的概念。

一:生命周期

Activity的生命周期如下图所示:


Activity的生命周期分为四个阶段

(1)运行态:

应用程序启动之后,若Activity处于屏幕的最前端,可以与用户进行交互的界面,我们说其具有运行态。一个Activity从创建到运行态,需要经历onCreate-->onStart-->onResume三个阶段

(2)暂停态:

Activity被置于后台,但是用户仍然可见,失去焦点,只是暂时不能进行交互,调用onPause()进入暂停态。进入暂停态的Activity,若想重新回到运行态,需要调用onResume()方法

(3)停止态:

Activity被置于后台,完全被其他Activity挡住,失去焦点,不能交互,调用onStop()进入停止态。若想重新回到运行态,需经过onRestart()-->onStart()-->onResume()三个阶段,此时应注意实行onRestart方法之后程序进入到的是onStart而不是onCreate。也就是说:onCreate()方法,只被执行一次,onResume()无论在什么状态均需要执行,onStart()旨在创建和onestart()之后执行一次。

(4)终止态:

Activity被终止,比如点击"返回"键之后,将结束程序的执行,调用onDestory()方法,进入到终止态。若想重新回到运行态,需重新定义Activity。

二:作用

清晰的区分Activity的生命周期,在以后的编程操作中,我们可以清晰的知道哪些操作应该在哪些状态下运行。比如某功能,要求用户第一次登陆时要注册,在此登陆的时候则直接跳入,这样的功能我们应该在onCreate方法中是实现,因为onCreate在应用程序的执行中,只运行一次。

三:生命周期的调用时机

1:调用时机

这六个方法,不需要用户手动调用,由系统自动调用。然而不同的方法调用的时机却不相同。

测试方法:创建工程,在主界面中,重写六个方法,添加输出语句,执行程序,按上述几种状态,分别测试程序,看后台输出即可验证结果。

public class MainActivity extends Activity {    @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 onRestart() {        super.onRestart();        System.out.println("onRestart");    }    @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("onDestory");    }}

测试结果:

①程Activity动,自动依次进入onCreate-->onStart-->onResume三个状态

②按home键,Activity全被挡住,依次进入到onPause-->onStop两个状态

③按返回键,终止程序执行,依次进入到onPause-->onStop-->onDestory状态

④长按home键,重新执行程序,依次进入到onRestart-->onStart-->onResume三个状态

2: 思考

单击A页面按钮实现从页面A到页面B的跳转,此时两个Activity处于生命周期的什么状态下呢?

解决办法:

(1) 创建工程,编写自定义Act2,在Act2中添加如上代码

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.act2);    System.out.println("2----onCreate");}@Overrideprotected void onStart() {    super.onStart();    System.out.println("2----onStart");}@Overrideprotected void onResume() {    super.onResume();    System.out.println("2----onResume");}@Overrideprotected void onRestart() {    super.onRestart();    System.out.println("2----onRestart");}@Overrideprotected void onPause() {    super.onPause();    System.out.println("2----onPause");}@Overrideprotected void onStop() {    super.onStop();    System.out.println("2----onStop");}@Overrideprotected void onDestroy() {    super.onDestroy();    System.out.println("2----onDestory");}

(2)在主界面上,添加跳转的实现及其他生命周期方法

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    System.out.println("1----onCreate");    findViewById(R.id.button1).setOnClickListener(new OnClickListener() {                                                           @Override        public void onClick(View arg0) {            Intent i = new Intent(MainActivity.this,Act2.class);            startActivity(i);                      }    });}@Overrideprotected void onStart() {    super.onStart();    System.out.println("1----onStart");}@Overrideprotected void onResume() {    super.onResume();    System.out.println("1----onResume");}@Overrideprotected void onRestart() {    super.onRestart();    System.out.println("1----onRestart");}@Overrideprotected void onPause() {    super.onPause();    System.out.println("1----onPause");}@Overrideprotected void onStop() {    super.onStop();    System.out.println("1----onStop");}@Overrideprotected void onDestroy() {    super.onDestroy();    System.out.println("1----onDestory");}

(3)运行工程,点击按钮,观看控制台,结果如下:

08-20 13:46:26.842: I/System.out(279): 1----onPause08-20 13:46:26.875: I/System.out(279): 2----onCreate08-20 13:46:26.875: I/System.out(279): 2----onStart08-20 13:46:26.875: I/System.out(279): 2----onResume08-20 13:46:27.212: I/System.out(279): 1----onStop

答案:由于此时A界面正在被B界面覆盖,所以A界面先进入到onpause状态,随后B界面启动,进入onCreate-->onStart-->onResume三个状态,之后A界面被完全挡住,A界面到达onStop状态。

Activity生命周期十分重要,要重点掌握,以后我们会经常用到的,注意产生时机与作用,注意区别哦。。


0