旋转设备时保存缓存

时间:2010-07-14 22:15:01

标签: android caching gallery

我有Gallerywiew

我正在使用lazyload下载图片,但是当我旋转设备时,它会重新加载所有图片并且不会使用缓存。

如果我android:configChanges="keyboardHidden|orientation",则当前图像的大小与最新方向相同。

要让图像显示完整尺寸,我会这样做:

Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE))
                           .getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();

3 个答案:

答案 0 :(得分:7)

不鼓励覆盖onConfigurationChanged(),因为你需要做很多工作才能做到正确。

您要做的是在您的活动中实现onRetainNonConfigurationInstance()。当系统知道它将在一瞬间重新启动它时(例如屏幕旋转),就会在您的活动被杀之前调用它。

onRetainNonConfigurationInstance()的实现可能会返回它喜欢的任何对象('this'是一个不错的选择,或者在你的情况下,你的缓存)。此对象将保留并可用于下次调用您的活动。

在onCreate()方法中,调用getLastNonConfigurationInstance()以检索系统为您保存的对象。如果此函数返回null,则按正常方式继续。如果它返回非null,那么这将是您之前从onRetainNonConfigurationInstance()传回的对象,您可以从中提取所需的任何信息。这通常意味着您不需要savedInstanceState包或保存的首选项中的任何内容。

我相信即使是开放套接字,运行线程和其他对象也可以通过这种方式保留配置更改。


添加:如果您 通过onRetaineNonConfigurationInstance()传递this,请不要依赖它。你将保留大量资源而不被释放。提取您需要的信息,然后将其发布。

答案 1 :(得分:1)

您需要覆盖onConfigurationChanged事件。

在我的应用程序中,我正在播放音乐,当你翻转手机时,它会停止,然后我发现如果我覆盖配置更改,我可以告诉它再次启动我的计时器,没有任何东西丢失。我完全知道你的想法,但这可能有助于你朝着正确的方向前进。

 @Override
             public void onConfigurationChanged(Configuration newConfig) {
               super.onConfigurationChanged(newConfig);
              startTimer();

             }

答案 2 :(得分:0)

旋转屏幕时,您将完成活动生命周期。该活动通过onDestroy()并调用其onCreate()方法。您必须重做任何显示计算并查看onCreate中的更改,并使用savedInstanceState来保留应用程序数据。

我希望这就是你所要求的