2011-02-10 9 views
0

私は次の問題を解決したいと思います。私はAbsListViewに一連の画像を持っています。画像は、インターネットからダウンロードする背景スレッドによって膨らまされます。 UIスレッドを妨げたくないので、私はこのスレッドを作っています。だから、ユーザーがAbsListViewをスクロールすると、バックグラウンドスレッドを破棄し、スクロール停止後に起動したいと思う。スクロール中にスレッドが破損するAbsListView

は、私は、少なくともオーバーライドonScroll方法を必要とするが、私は、私はThread.destroy()メソッドを(使用しようとするので、私は、それの体で書くべきかわからない、それを行うにはこれは廃止予定です)私はNoSuchMethodErrorです。

私はonScrollの場合はnullと定義していますが、ダウンロードされたイメージをスクロールアイテムに設定します。

どうかこのような状況に対処する方法をアドバイスしてください。

答えて

3

一般にスレッドを拡張することによってスレッド機能を使用することは推奨されません。 Androidには、AsyncTaskと呼ばれる素敵なものがあります。http://developer.android.com/reference/android/os/AsyncTask.html

使い方が簡単で、.cancel()などの便利なメソッドがあります。 java apiメソッドが推奨されない場合は、使用しないでください。

+0

からダウンロード/キャッシュ画像を非同期ライブラリをチェックアウト私のAbsListViewからの項目は、バックグラウンドスレッドによって送信されたメッセージを処理するハンドラを持っています。このメカニズムをAsyncTaskでどのように適用すればよいのか分かりません。しかし、関係なく、お返事ありがとうございます。 – teoREtik

+0

ダンピングされたAsyncTaskは、通常のスレッドと同じ機能を持ちます。通常のスレッドでrun()を実行するのと同じように、なぜdoInBackgroundからのハンドラーポストを行うことができないのか分かりません。 –

+0

まあ、そうです、私はそれを試してください。 – teoREtik

0

ThreadをJavaで停止する方法については、以下の記事を参照してください。

cancel()方法は、実際にdoInBackground()に発生している処理を停止しないように私はAsyncTaskがあなたの状況に適してであろうと確信していない、それは単に防止onPostExecute()代わりにonCancelled()を呼び出します。

+0

http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean) mayInterruptIfRunning - このタスクを実行しているスレッドを中断する必要がある場合はtrue、 –

+0

'true'に設定すると、バックグラウンドタスクを中断することのみ試みます*私のテストでは実際には成功しませんでした。 –

+0

また、私の考えでは、AsyncTaskを最も効果的な方法で使用するには、アクティビティの内部クラスとして作成する必要があります。 – teoREtik

関連する問題