2012-05-03 12 views
0

私はAsyncTaskによって常に更新されScrollView、内TableLayoutを、持っています。Androidレイアウトビューを同期するにはどうすればよいですか?

私はそれがに「法的」であれば、同時にユーザーがTableLayoutをスクロールすることができるときAsyncTaskによって行を追加/削除するか分かりません。

更新プログラムがGUIのスクロールを妨げないようにするにはどうすればよいですか?

OSは私のためにこれを処理しますか?

答えて

0

Androidでは、アプリケーションを実行するメインスレッドは、UIを更新できる唯一のスレッドです。 AsyncTask内からレイアウトの内容を変更しようとすると、エラーが発生します。ただし、AsyncTaskのonPreExecuteonPostExecuteメソッドは、メインスレッドで実行されるため、そこでUIを更新できます。

質問に答えるには、はい、OSは非同期UI更新を許可しないことでこれを処理します。

+0

onProgressUpdate()はどうですか?それはまた、メインスレッドで実行されますか?そこに行を追加しても問題ありませんか?はいの場合は、同期する必要がありますか、通常は行を追加するだけですか? – ilomambo

+0

'onProgressUpdate()'もメインスレッド上で実行されます。そのメソッドで行を追加または削除するのはまったく問題ありません。しかし、これが起きている間、ユーザーはあなたのアプリとやり取りすることができるので、リストを見ていると行が追加されて削除されていることに気付くでしょう。彼らがアイテムを見ている限り、これは問題ありません。行にクリックリスナーがある場合は、奇妙な状況に遭遇するかもしれませんが、あなたが何を記述しようとしたことがないので、わかりません。 – MattDavis

+0

もう1つのことは、AsyncTaskの実行中にユーザーがアクティビティを切り替えることを許可すると、バックグラウンドで続行されることに注意することが重要です。アクティビティは終了するまで破壊されたりガベージコレクトされたりすることはありません。これは、すべてのUIコンポーネントとクラス変数が破壊されるまでメモリに保存されるため、アプリが直接クラッシュしてはいけませんが、後でOOMエラーなどの問題が発生する可能性があります。スレッドが使用されているため、AsyncTaskが実行されません。 – MattDavis

関連する問題