您的位置:首页 > 其它

Activity生命周期

2015-11-08 22:16 246 查看
一个老生常谈的问题,但是之中还是有许多的细节需要处理。

例如下面的几个东西你是否考虑了?

(1).屏幕旋转的时候EditText上面的内容是否有保存,ListView的位置是否有保存,应用是否会crash?

(2).运行程序的时候,突然来了一个电话,应用是否会crash?

(3).从一个Activity跳到另外的一个Activity以后,是否还会消耗大量的资源,电量等等?

(4).是否会丢失数据当从一个Activity返回来的时候?

最近读了读Android Developer中的Activity生命周期的内容,也梳理了一下自己之前理解不当的地方。在Activity的生命周期中有这样的几个方法。

onCreate(),onStart(),onResume(),onPause(),onStop(),onDestory(),还有一个比较重要的方法onRestoreInstanceState()。

第一次打开一个Activity的时候,onCreate(),onStart(),onResume()。

当Activity被另外一个Activity(我的经验一定需要Activity遮住才会调用,Dialog是不会的,不知道是否正确)遮住的时候,就会调用onPause()。

当一个Activity完全被另外的一个Activity遮住的时候就会调用onStop()。

1.从打开Activity A跳转到Activity B,再返回Activity A。

(1)打开一个Activity A,会执行onCreate() A,onStart() A,onResume() A。

(2)从A打开B,会执行onPause() A,onCreate() B,onStart() B,onResume() B,onStop() A。(会先将Activity B打开以后再执行onStop() A的方法,是否有什么想法,哈哈)

(3) 从B返回A,onPause() B,onRestart() A,onStart() A,onResume() A,onStop() B,onDestory() B。

2.从打开Activity A跳转到DialogActivity B(Activity的Theme为Theme.Dialog),再返回Activity A。

(1)打开一个Activity A,会执行onCreate() A,onStart() A,onResume() A。

(2)从A打开B,会执行onPause() A,onCreate() B,onStart() B,onResume() B。(不会执行Activity)

(3) 从B返回A,onPause() B,onRestart() A,onStart() A,onResume() A,onStop() B,onDestory() B。(与上面的比较有什么不同呢?)

3.打开Activity A(竖屏),旋转屏幕(横屏)。

(1)打开Activity A,会执行onCreate() A,onStart() A,onResume() A。

(2)将屏幕旋转,会执行onPause() A,onStop() A,onDestory() A,onCreate() A,onStart() A,onRestoreInstanceState(),onResume() A。

4.打开Activity A跳转到一个Dialog,再回去。(将通知板拉下来的时候情况是一样,在想是不是也是Dialog)

(1)打开Activity A,会执行onCreate() A,onStart() A,onResume() A。

(2)打开Dialog,没有任何的变化。

(3)返回到Activity A,没有任何的变化。

5.打开Activity A,home键回去后再进入。

(1)打开Activity A,会执行onCreate() A,onStart() A,onResume() A。

(2)home键回到屏幕,会执行onPause() A,onStop() A。

(3)再次进入到应用,会执行onRestart() A,onStart() A,onResume() A。

1和2的不同之处是一个是Activity,一个Dialog风格的Activity,也就是一个是全屏的一个不是全屏,而这也正是说明了onPause()->onResume(),onStop()->onStart()。

屏幕旋转的操作是非常巨大的,将Activity先摧毁以后再重新创建。这之间数据的保存等等,是非常的重要的,其实对于EditText的内容,或者ListView等的内容只需要为它们附上一个唯一的id(android:id就可以了),但是onRestoreInstanceState()这个方法其实也起了很大的作用的。

onPause()是在屏幕稍微被遮住的时候就会调用而onStop()则是完全被遮住的时候才会调用,所以也有了一个启发是,不适合在onPause()中写耗时的操作,会影响下一个Activity的打开的。所以一些在被其他Activity挡住时的耗时操作应该是写在onStop()中。但是在onPause()中还是要释放资源的,比如GPS,视频的拍摄等等(不及时的关闭可能会出一些问题的,如果下一个Activity的打开时间太,就会出现比较大的问题)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: