Android组件生命周期

组件生命周期

组件的生命周期是指组件从被构造运行开始,直至被销毁的整个时段内,组件状态的变化。

当组件状态发送变化时,Android系统会调用该组件对象的特定函数进行通知,开发者需要派生实现这些函数,对相关事件进行监听和处理,从而掌握组件的生命周期。

 

数据组件管理

对于只读数据,一般在Activity.onCreate()时进行数据加载,直到组件的Activity.onDestroy()函数调用时再释放。

对于读写数据,一般在Activity.onCreate()Activity.onResume时进行数据加载,在Activity.onPause写数据。因为Activity.onPause调用后,组件处于可回收状态,资源紧张时,可回收。

 

状态组件

状态数据是用户与界面组件交互过程产生的临时数据。不会被持久化。状态数据暂存内存,若组件被回收,数据将丢失。

为此,Android的界面组件提供了事件函数,帮助开发者保存状态数据。当系统将界面切离前台组件(Activity.onPause调用前),调用Activity.onSaveInstanceState,在该函数中,开发者可以将组件的状态写入参数onState中,onStateBundle类型。

Activity.onSaveInstanceState不会每次都调用,如用户点击回退键或者Activity.finish()主动调用时,因为这意味着当前的状态被用户主动放弃。

 

如果组件被回收,缓存的数据会在组件界面被重新构造时通过Activity.onCreate()传入。其中的savedInstanceState参数与onState参数对象完全一致。若savedInstanceState为空,说明是一次全新的构造,反之是恢复性构造。

savedInstanceState对象还可以通过Activity.onRestoreInstanceState()函数传入,开发者也可以在这里进行状态恢复。

 

为了降低开发者的负担,Android大部分系统组件实现了状态缓存。在Activity.onSaveInstanceState调用前,界面组件会遍历整个控件树,将各个组件的状态保存下来,等Activity.onRestoreInstanceState()函数调用时进行恢复。

 

线程管理

应用通常采用多线程设计,在后台执行耗时操作。Android组件生命周期没有对多线程提供良好的支持模型,需要开发者自主实现。

好的管理方案是:

将线程的句柄信息当做界面组件的状态信息保存下来,如果系统强行回收组件对象,则需要在组件再次构造时,根据缓存的线程的句柄信息找到该线程,从而避免线程泄露。

猜你喜欢

转载自aoyouzi.iteye.com/blog/1989006