2012-01-30 5 views
0

メソッドが実行中に進行中のダイアログを表示するためのスレッドを作成する可能性はありますか?AsyncTaskで行われているように、データベースがブロックされ、AsyncTask

ProgDialog.show()のようなものがstartThreadのようなもので、最後の行がProgDialog.dismiss()などのstopThreadのようなものであるとしましょう。

私はそれを求める理由は、私はAsyncTaskでそれを試みたが、私はAsyncTaskの内側と呼ばれるものをデータベース・メソッドは、メインUI内の他のデータベース操作しながら、データベース操作を実行しようとしてまでそれがうまく働いていたということであり、まだ終了していない(または開始しようとした)。

データベースがブロックされているという例外がありました。私はほとんどの場合、sqliteのトランザクションを一貫性とパフォーマンスのために使用します。この場合も必要です。

+0

http://www.vogella.de/articles/AndroidPerformance/article.htmlこちら。おそらくメソッドを同期させるべきです。アーキテクチャに何か問題がある可能性があります。ロックは正常ですが、デッドロックは正常ではありません。 –

+0

最良の方法は、単一のスレッド上ですべてのdb操作を実行する(または少なくとも複数のスレッド同期を管理する)単一のデータベースマネージャクラスを持つことです...ハンドラを使用して、その中のすべてのdb操作を実行できます...コード将来のコードでデッドロックを作成する方法がないので、安全です。 –

答えて

1

それはAsyncTaskで行われるように、スレッド内で動作そのものをかけることなく、方法が実行されている間progressdialogを示すためだけでスレッドを作るpossibiltyが、ありますか?メソッドの最初の行は、ProgDialog.show()のようなstartThreadのようなもので、最後の行はstopThreadのようなもので、ProgDialog.dismiss()のようなものです。

いいえ、ダイアログを表示したり消したりできる唯一のスレッドはメインのアプリケーションスレッドであり、特にそのスレッドをブロックしたくないためです。

AsyncTask内で呼び出されたデータベースメソッドが、メインUI内の他のデータベース操作がまだ終了していない(または開始しようとしている)間、データベース操作を実行しようとするまでうまくいきました。

メインアプリケーションスレッドから「その他のデータベース操作」を移動します。

+0

ありがとう、これは助けました。その結果のすべてのDBメソッドをAsyncTaskの中に入れます。 – user1179014

関連する問題