Google 关于管理Activity生命周期的示例
昨天晚上我看了Google training里面Manage the Activity Lifecycle这一节,看了以后学到很多以前看书,看视频都没有了解过的东西,Google关于如何恰当地使用这些方法来是我们的APP运行流畅,符合用户的预期给出了很好的指导意见,比如Pause()里面释放不需要的系统资源,停止UI动画等消耗内存的东西,不要进行密集CPU操作以影响Activity的过渡等等,还有SaveInstanceStates()作用及用法的详细讲解。。。。反正好多好多了。
于是,我就忍不住下载了官方示例,看看Google的实例APP是怎么样的。在Studio里面运行一看,果然不一样。一般的教程都是给你看看Log就好了吧,而且只运行一个Activity,让你看看单个Activity的变化是怎么样的。瞬间差距就出来了。。。。。Google的示例不仅仅将Activity的数量范围变大到3个,还用图形化的方式更直观的给我们展示了Activity生命周期的变化过程。
有图为证:
看着确实是厉害了很多呢,如果只是从图形化的角度去看看Activity的生命周期在各种情况下的变化,学习Activity生命周期的目的应该达到了,但我很好奇他是怎么做出来,因为我是Android新手,所以就看了看源码,下面是我从源码里面的学到东西的摘要。
如果大家对这个示例也感兴趣,可以点击这里进行示例的下载.
第一个问题:
- 如何在多个Activity切换的时候,追踪Activity的状态变化信息,然后显示出来?
第一个回答:
- 首先在每个Activity使用一样的布局,然后定义一个工具类A来存贮所有Activity变化的状态信息,所有的Activity共用一个静态工具类A变量,这保证了状态信息的共享。然后定义一个工具类B,分别在每个Activity的不同状态打印信息。
好了,让我们先看一下工具类A的代码吧。
public class StatusTracker {
private Map<String, String> mStatusMap;
private List<String> mMethodList;
private static StatusTracker ourInstance = new StatusTracker();
private static final String STATUS_SUFFIX = "ed";
public static StatusTracker getInstance() {
return ourInstance;
}
private StatusTracker() {
mStatusMap = new LinkedHashMap<String, String>();
mMethodList = new ArrayList<String>();
}
public List<String> getMethodList() {
return mMethodList;
}
public void clear() {
mMethodList.clear();
mStatusMap.clear();
}
/**
* Adds the status value for the given activityName into the Map.
*
* @param activityName
* @param status
*/
public void setStatus(String activityName, String status) {
mMethodList.add(activityName + "." + status + "()");
if (mStatusMap.containsKey(activityName)) mStatusMap.remove(activityName);
mStatusMap.put(activityName, status);
}