2012-03-21 27 views
16

onRetainNonConfigurationInstanceのサポートが終了して以来、私は設定変更のためにより多くのフレームワークを活用してきました。 ViewPagerを使用してメインのフラグメントを保持するので、setRetainInstanceを使用することはできません。これにより、標準のアクティビティやビューのようにonSaveInstanceStateを使用するように構成の変更が制限されます。onSaveInstanceStateの制限はありますか?

これは問題なく完全に動作していますが、私は現時点ではかなりのシリアライズ可能なデータセットを渡しているので、それが良いアイデアであるかどうかをコミュニティに伝えたいと思っています。

tl; dr:onSaveInstanceStateは、通過するサイズに制限がありますか?

+0

私はそう思わない。おそらく 'SharedPreferences'を使用しています。 –

+0

"私はメインのフラグメントを保持するためにViewPagerを使うのでsetRetainInstanceを使うことはできません" - なぜあなたは 'ViewPager'のフラグメントで' setRetainInstance() 'を使うことができないと思いますか?私はこの制限を引用する場所を見つけることができません。リンクがありますか?ありがとう! – CommonsWare

+0

それは単に動作しません、おそらくバグです。 'FragmentPagerAdapter'と' FragmentStatePagerAdapter'の両方で試してみたところ、 'setRetainInstance()'でフラグメントが正しく動作していませんでした。 'ViewPager'から標準スイッチに移動したとき(以下を参照)、すべて正常に動作しました。 http://developer.android.com/resources/samples/Support13Demos/src/com/example/android/supportv13/app/ActionBarTabsPager.html – HandlerExploit

答えて

14

「かなり大きい」というよりも、何かを言っておくと役に立ちます。 :)

このデータはIPCを通過し、IPC制限は約1MBです。マーシャリングされたサイズをそれよりも大幅に小さく保つ必要があります。おそらく100Kがよいでしょう。実際には、自分のプロセスが殺されたときでも、このデータはRAM上のシステムによって保持されなければならないので、できるだけ小さくしておきたい(あなたがそこに置いたものを考え、スペースを浪費しないようにする)。

0

制限はメモリの制限であり、OutOfMemoryエラーが発生していないため、問題はないはずです。

渡すオブジェクトにViewまたはContextがないことを確認してください。これにより、ユーザーが方向を変えてもメモリが急速に使用される可能性があります。

+0

アプリケーションがリサイクルされると、どのようにメモリに保持されますか?この情報は永続しているので、アプリケーションに依存するメモリを保持することができないので、もちろんOutOfMemoryErrorsはアプリケーション自体には発生しません。そして、私は、シリアライズ可能オブジェクトを渡していると明示していましたが、それを介してビューまたはコンテキストを渡すことは不可能です。しかし、onRetainNonConfigurationInstanceに渡した場合は、アクティビティ全体がリークしてしまいます。そうすれば、最終的にはそのシナリオの設定変更のメモリが不足します。 – HandlerExploit

関連する問題