旋转屏幕时如何保存图像onSaveInstanceState?

时间:2013-02-07 19:26:02

标签: imageview instance

我正在通过AsyncTask将图像下载到图像视图,我想在我旋转手机时保存图像,而不是再次下载到图像视图...

public void onSaveInstanceState(Bundle toSave) {
    super.onSaveInstanceState(toSave);
    my_image.buildDrawingCache();
    Parcelable bm = my_image.getDrawingCache();
    toSave.putParcelable("savedImage", bm);

} 

我正在尝试了解我是否对 onSaveInstanceState 做错了,如何检索此状态 onRestoreInstanceState 并放置图片而不再重新下载...

3 个答案:

答案 0 :(得分:7)

onSaveInstanceState()函数必须用于保存小对象,而不是重物。

如果您想在手机旋转时保存大量图片,请使用以下任何一项技术:

  1. 如果要保存大对象,请使用onRetainNonConfigurationInstance()函数。
  2. 否则我们可以将该图像设为静态图像,以便图像只加载一次。 含义:从网络下载图像时,请将其指向静态变量。 如果用户旋转手机,因为android会杀死该活动并重新创建它,只是 如果该静态变量不为null,则将if条件检查,然后再次下载。 如您所知,静态变量只会创建一次,不会再次下载。
  3. 但最好选择第一个选项。

    参考:developer android official tutorial

答案 1 :(得分:0)

首先,super.onSaveInstanceState(toSave)应位于方法onSaveInstanceState(Bundle toSave)中的最后一位。

onCreate(Bundle savedInstanceState)检查中,如果savedInstanceState不为空并获得您想要的内容:

@Override
protected void onCreate(Bundle savedInstanceState) {
...
    if(savedInstanceState != null){
        ...
        ...savedInstanceState.getParcerable(...);
        ...
    }
}

答案 2 :(得分:0)

不要使用静态变量来保留位图。