3

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

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

} 

我试图了解我是否在onSaveInstanceState上做错了什么 ,以及如何检索此状态onRestoreInstanceState并放置图像而无需再次下载...

4

3 回答 3

7

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

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

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

但最好选择第一种。

参考:开发者android官方教程

于 2013-12-07T07:50:50.380 回答
0

首先super.onSaveInstanceState(toSave)应该在 method 中的最后一个位置onSaveInstanceState(Bundle toSave)

onCreate(Bundle savedInstanceState)检查中,如果savedInstanceState不为空并得到你想要的:

@Override
protected void onCreate(Bundle savedInstanceState) {
...
    if(savedInstanceState != null){
        ...
        ...savedInstanceState.getParcerable(...);
        ...
    }
}
于 2013-04-19T17:28:39.387 回答
0

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

于 2015-10-26T15:51:36.653 回答