Activity生命周期详解

Activity生命周期图:

Activity生命周期详解

1.Android用Activity Stack来管理多个Activity,同一时刻只有最顶端的Activity处在激活状态或运行状态(Active or Running),其它的Activity都被压在下面。

2.Activity运行情况:

从创建到运行态所触发的事件:onCreate()—>onStart()—>onResume();

从运行态到静止态所触发的事件:onPause()—>onStop();

从静止态到运行态所触发的事件:onRestart()—>onStart()—>onResume();

从运行态到暂停态所触发的事件:onPause();

从暂停态到运行态所触发的事件:onResume();

3.Activity生命周期

  • 打开应用onCreate()—>onStart()—>onResume();
  • 从ActivityA切换到ActivityB调用顺序:执行A的onPause(),执行B的onCreate()—>onStart()—>onResume(),执行A的onStop();
  • 按手机返回键调用顺序:执行B的onPause(),然后执行A的onRestart()—>onStart()—>onResume();

4.当弹出Dialog或半透明的Activity时,原Activity便会进入到pause状态,此时原Activity可见,但不能与用户交互。

5.子线程中更新UI的,这个可以算是Google设计Android的一个原则之一,也是开发者众所周知的!但是真的不能在子线程中更新UI吗?答案是:是的,不能在子线程中更新UI!

有趣的例子:

将如下代码放在onCreate()、onStart()、onResume()中

new Thread(new Runnable() {

public void run() {

      mBtnA.setText("Runnable");

}

}).start();

执行后发现不会报错,为什么呢?因为UI在上面三个方法中还未实例化,也就没有更新UI,因此没有报错,但是text作为Button的一个属性被保留下来,当UI被实例化时,会显示text内容。

修改为如下代码会报错:

new Thread(new Runnable() {

public void run() {

     Thead.sleep(5000);

     mBtnA.setText("Runnable"); //这里的Button已实例化

}

}).start();

你可能感兴趣的:(Activity)