Android Activity的生命周期

Andoroid使用了返回栈,所以活动是可以层叠的,并且展示给用户的始终是最后入栈的,销毁的时候也是先销毁栈顶的活动。

简单照着书写了一个程序来体验一下Android Activity的生命周期。写了一个主活动,一个Normal活动和一个Dialog活动。layout就不展示了,需要注意的是DialogActivity在AndroidMainfest注册的时候,我们需要使用android:theme属性如下:

 

MainActivity.java

NormalActivity.java

 

Dialog.java

关注LogCat,当我们点击应用程序的时候,会发现依次执行了onCreate(),onStart(),onResume()方法。当我们点击NormalActivity的时候发现执行了onPause(),onStop()的方法,这是因为NormalActivity把MainActivity是完全覆盖了。因而此时MainActivity处于不可见的状态,onStop()方法就会执行。当我们点击返回键返回的时候便会发现执行了onRestart(),onStart(),onResume()方法。因为onCreate()方法只有第一次建立活动的时候才会调用,因而这次并没有执行。

点击DiaLogActivity会发现只打印了onPause(),这是因为DiaLogActivity并没有完全覆盖MainActivity,所以主活动并没有停止。

 

可能发现在MainActivity中我写了一些与之前不同的语句。这是因为当一个活动进入停止状态后,有可能会因为系统内存不足而被销毁。这样当我们back的时候,Activity将会被重新创建。为了不丢失我们的临时数据,既使活动重新创建也可以显示我们之前保存的数据。 那我们就需要onSaveInstanceState()方法,它携带一个Bundle参数,而Bundle有很多方法用来保存数据。如putString()等。这些方法有两个参数,与putExtra()类似,第一个参数是键值,第二个是真正保存的内容。

这段代码可以保存临时数据。

而这个key字符串虽然保存下来了,但是我们仍需要修改onCreate()方法才可以。onCreate()的参数也是一个Bundle类型,一般我们调用这个方法的时候这个参数均为null,但是一旦我们有保存的临时数据的话,这个参数就会带有之前保存的所有数据。我们在进行取值操作即可。

 

 

没了…

发表评论

电子邮件地址不会被公开。 必填项已用*标注