Android开发之恢复Activity与fragment的状态

Android Activity 与 Fragment的 恢复

目前Android手机的应用越来越多,而且包也越来越大,占用内存也会越来越多,所以导致的问题是Android应用打开多了之后,你自己的应用可能会被系统杀死掉,这个出现的情况很多。比如小米手机上面,我们只要一打开相机的应用,我们的应用程序就会被系统杀死,杀死之后系统会把你们的Activity重新拉起来,拉起来之后就会恢复现场。如果你的应用程序没有考虑到这种情况的时候,比如运行中有一些中间状态,然后杀死之后重新拉起来,中间状态就丢失了,所以应用就很容易崩溃,这种问题在你看代码的情况下根本就看不出这个代码会有问题。

所以这里大概说的就是这个问题,其实问题很简单,只是这个没有作为一个基础的常识作为一个Android开发应该知道的内容。

对于Activity

在我们的Activity被隐藏的时候,Activity会调用onSaveInstanceState方法,对于系统控件,系统的View都有对这个方法的支持,但是如果是Activity自有的逻辑,就需要开发者自己来在这个方法里面进行存储

在Activity的onCreate的函数里面,如果传入的savedInstance不为null的时候,就表示我们的Activity是被系统杀死过的情况,所以我们就需要对中间状态进行恢复,当然系统也会调用onRestoreInstanceState,也可以在onCreate里面进行恢复。

参考

对于Fragment

因为如果Activity被杀死的情况下,Fragment起来的时候系统因为不知道你的Fragment的构建参数,所以一般会直接用Fragment的默认构造函数来进行初始化,如果你的Fragment没有这个构造函数的话,那系统就直接挂掉。

    Default constructor. Every fragment must have an empty constructor, so it can be instantiated when restoring its activity's state. It is strongly recommended that subclasses do not have other constructors with parameters, since these constructors will not be called when the fragment is re-instantiated; instead, arguments can be supplied by the caller with setArguments(Bundle) and later retrieved by the Fragment with getArguments().
    Applications should generally not implement a constructor. The first place application code an run where the fragment is ready to be used is in onAttach(Activity), the point where the fragment is actually associated with its activity. Some applications may also want to implement onInflate(Activity, AttributeSet, Bundle) to retrieve attributes from a layout resource, though should take care here because this happens for the fragment is attached to its activity.

所以一般的做法就是Fragment不进行构造函数的override,然后通过setArgument和getArgument来进行参数的获取,这样就OK了

你可能感兴趣的:(Android开发)