上一篇讲到用fragment代替activity,做主要的界面呈现,其主要难点就是要对fragment的生命周期非常熟悉。相对于activity,fragment的最大好处,就是其非常灵活的生命周期。我们可以将界面的任务分成两部分,一部分作UI的展示,另一部分则是和UI无关的后台任务。因为这两部分生命周期是不同的。UI会随着屏幕尺寸,屏幕水平/竖直的方向变化时,生命周期需要重新进行;而非UI任务所需要的生命周期则是,只要Activity没有结束,就不要中断或者重走生命周期。
因此,我们可以创建一个没有UI界面的Fragment。只需要在OnCreate中调用setRetainInstance(true);这个Fragment就不会跟随Activity的生命周期一起重建。同时我们要记得在onDetach方法中,将回调回收,防止activity实例的泄露。
/** 46 * 设置回调对象为null,防止我们意外导致Activity实例泄露(leak the Activity instance) 47 */ 48 @Override 49 public void onDetach() { 50 super.onDetach(); 51 mCallbacks = null; 52 }