我有Gallerywiew
。
我正在使用lazyload
下载图片,但是当我旋转设备时,它会重新加载所有图片并且不会使用缓存。
如果我android:configChanges="keyboardHidden|orientation"
,则当前图像的大小与最新方向相同。
要让图像显示完整尺寸,我会这样做:
Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
答案 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来保留应用程序数据。
我希望这就是你所要求的