旋转设备时保存缓存

FoJ*_*jen 0 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();
Run Code Online (Sandbox Code Playgroud)

Edw*_*alk 7

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

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

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

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

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


添加上:如果你通过this通过onRetaineNonConfigurationInstance(),不挂到它.你将保留大量资源而不被释放.提取您需要的信息,然后将其释放.