0

私はhttp://developer.android.com/training/animation/screen-slide.htmlに従ってセットアップしたAndroidアプリケーションを持っています。

ただし、ViewPager には (一度にではなく) かなりの数のフラグメントがあり、それらを使用していないときにそれらを破棄したいと考えています。全体像を把握するために、ViewPager の getItem(int position) が呼び出されるたびに作成されるフラグメントが 1 つあります。これは約 365 回 (1 年の各日に 1 つ) です。ページの 1 つに ImageView を追加するまではすべて問題ありませんでしたが (最後に合計 12 個...)、それらのページ フラグメントの 3 つを表示しようとすると、メモリが不足しています。

私の質問は、現在のページではないフラグメントを削除/破棄するにはどうすればよいですか? FragmentManager の BackStack をポップしようとしましたが、うまくいきませんでした (BackStack には何もないようですが、もう一度 - getItem() 関数である間違った場所で呼び出していた可能性があります)。

コードを提供したいと思いますが、重要な部分を探すのはかなり大変です。上記のリンクのチュートリアルとまったく同じ構造です。

ありがとう

4

1 に答える 1

0

imageViews をページャーに追加した後にメモリの問題が発生した場合は、アプリに追加したばかりの imageView 用に作成したビットマップのメモリ面に注目してみてはいかがでしょうか?

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

デバイスカメラからの写真は非常に大きくなる可能性があり、メモリの問題を非常に迅速に引き起こす可能性があることに注意してください.IMOは最初にそれに焦点を当てる必要があります.

IMO 、標準の ViewPager 、および標準の Adapter は、ページャーを循環するフラグメントがたくさんある場合でも、メモリの管理に問題ありません。

また、ページャーとアダプター間のコラボレーションの詳細が多いため、ページを明示的に破棄し、ViewPager にフラグメントを再ロードするという問題に対処するのは少し複雑です。

アダプターとページャーの複雑さに対処したい場合は、選択したページャーとアダプターのソース コードに入る必要があります。

 * {@link android.support.v4.app.FragmentStatePagerAdapter},
 * {@link android.support.v13.app.FragmentStatePagerAdapter};

ViewPager でフラグメントを管理するトピックに関する多くの投稿からわかるように、単にアダプターで「destroyItem()」を呼び出したり、notifyDataSetChanged() を呼び出す前にアダプターにバインドされた ListArray からフラグメントを削除したりするだけでは十分ではありません。アダプタ。また、必要な結果を得るために、 getItemPositionの操作がViewPager と共にどのように機能するかを正確に理解する必要があります。

ViewPager アプローチを使用するには、おそらくかなりの時間がかかります。

可能であれば、最初にビットマップに焦点を合わせて解決してください。

于 2013-08-31T15:26:57.790 に答える