ViewPager 旋转性能

ViewPager rotation performance

我有一个 ViewPager,里面有 9 个 Fragments。每个 Fragment 都从网络上加载了一些数据。当我 旋转屏幕 通过 Intent 打开另一个 activity 并加载所有 9 个片段时,它们都调用 OnSaveInstance 方法,其中每个片段数据都被序列化以供将来片段重新创建。它会导致一些延迟和消息

Skipped 41 frames!  The application may be doing too much work on its main thread.

所以 OnSaveInstance 在 运行 上 UI 线程对吗? 9个片段的序列化使其跳帧。

我怎样才能避免这种滞后?有没有办法在后台执行 OnSaveInstance 代码?

您收到该消息的原因有很多,这并不意味着您的应用运行不佳。即使在这种情况下超过 41 帧。有关详细信息,请参阅此 post:

Meaning of Choreographer messages in Logcat

更新:

在这种情况下,post 可能会对您有所帮助:

Why use Fragment#setRetainInstance(boolean)?

使用 setRetainInstance 时请牢记 Fragment 生命周期。参见:

http://developer.android.com/reference/android/app/Fragment.html#setRetainInstance(boolean)

有关 Android 中内存管理的精彩技巧,请参阅:

https://developer.android.com/training/articles/memory.html

有关此方法的详细解释,请参阅:

Understanding Fragment's setRetainInstance(boolean)