0

私はリアルタイム メッセージ アプリケーションに取り組んでいます。着信メッセージの受信を処理する部分を作成しました。メッセージを受信したら、レコードを挿入しSQ-LITE、コールバックをトリガーして update( ListView) の UI に通知します。コールバックでは、UI を更新するためにいくつか実装します。カーソルアダプターを使用しています。コールバックで を開始AsyncTaskし、バックグラウンドでデータベースにクエリを実行してチャット履歴を取得します。ではonPostExecute、バックグラウンドからクエリを実行してアダプタに割り当て、UI を更新するカーソルを使用します。

私の質問は次のとおりです。受信メッセージが多数ある場合、多くAsyncTaskの s がトリガーされ、UI が何度も更新されます。そのため、ListViewまさに「ラグ」が発生し、ユーザーでさえ何もできなくなります。AsyncTaskデータベース内のすべてのチャット履歴を取得するため、データベース内のチャット履歴への最新のクエリが正しいことを意味するため、停止/キャンセルして最新のもののみを処理するにはどうすればよいですか。このケースに取り組むために、または他のアイデアを
停止する方法を誰かが提案できますか?AsyncTask

4

1 に答える 1

2

AsyncTasks を作成するときに (または onPreExecute() メソッドで) リストに入れ、完了したら (onPostExecute() メソッドで) リストから削除します。このようにして、リストには現在完了していないすべての AsyncTasks が含まれるため、それらすべてを停止する必要がある場合は、リストを反復処理して、最後に追加されたタスクを除くすべてのタスクを停止します。

于 2013-03-03T12:52:32.377 に答える