1

ViewPagerでスワイプするたびに、次のプロセスがあります

  1. instanceiateItem で ListView の新しいインスタンスを作成します。
  2. この ListView を ViewPager に追加します。
  3. バックグラウンド スレッドを開始してデータを読み込み、UI スレッドにメッセージを送信して、読み込まれたデータを手順 1 で作成した Listview に設定します。

私の質問は、非常に速くスワイプすると、ステップ 3 で作成された、実行する必要のない多くのスレッドが存在すると推測されるため、この状況にどのように対処すればよいでしょうか? これらのスレッドの実行を停止するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

ViewPager.setOffscreenPageLimit(MAX_SIZE)MAX_SIZE を使用して、使い慣れたものに設定することをお勧めします。ページがこの範囲を超えた後

public void destroyItem(ViewGroup container, int position, Object object)

が呼び出されます。これで、cancel を呼び出してスレッドを処理し、そのページに必要なその他の処理を行うことができます。これにより、スクロール速度に関係なく、同時に実行されるスレッドの数が制限されます。

ユーザーがスクロールしてその範囲に戻ると、instantiateItem アイテムが再度呼び出されます。

于 2012-11-30T10:50:00.897 に答える