1

メインスレッド(UIスレッド)からMySQLDBにアクセスできないことを理解しています。だから私は今、そうするためのオプションがあることを知っています。ワーカースレッド(Thread t = new Thread())を使用してMySQL dbにアクセスし、必要なものを取得するか、AsyncTaskを実行してMySQLdbにアクセスして必要なものを取得できます。

しかし、ここでの私の質問は、これまたはここで最も効率的なアプローチを実行する正しい方法は何でしょうか?これに出くわしたとき、私は本当に良いプログラミング手順を理解し、それに従いたいと思っています。

では、MySQLデータベースからデータを取得する:AsyncTask、ワーカースレッド、それとも時間や電力などに違いはありませんか?

4

3 に答える 3

4

実際には、を使用するのが最善の方法Loadersです。より具体的にはCursorLoader。とLoaders比較した場合の利点は、があなたまたはライフサイクルに結び付けられることです。したがって、またはが停止した後にまたはが終了しても問題が発生することはなく、存在しなくなったコンポーネントに通知しようとします。AsyncTasksThreadsCursorsActivityFragmentAsyncTaskThreadActivityFragment

ここでローダーの使用方法、およびここでLoadersローダーの前の生活のいくつかの例を見つけることができます。

于 2013-03-26T07:17:59.070 に答える
4

AsyncTaskは、スレッドとハンドラーの周りのヘルパークラスになるように設計されており、一般的なスレッドフレームワークを構成しません。AsyncTasksは、理想的には短い操作(最大で数秒)に使用する必要があります。スレッドを長期間実行し続ける必要がある場合は、java.util.concurrentpacakgeによって提供されるさまざまなAPIを使用することを強くお勧めします。 Executor、ThreadPoolExecutorおよびFutureTask。(ドキュメントから直接)。

http://developer.android.com/reference/android/os/AsyncTask.html

長時間実行される操作のためのasynctaskの代替は、robospiceです。

https://github.com/octo-online/robospice

アップデート:

Asynctaskは、コルーチンまたはその他のスレッドメカニズムを使用して非推奨になりました。延期可能な仕事のためにワークマネージャーを訴えることを検討してください。

于 2013-03-26T07:19:47.457 に答える
2

AsyncTaskはスレッドと比較して優れています

AsyncTaskを使用すると、UIスレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作しなくても、バックグラウンド操作を実行してUIスレッドで結果を公開できます。

そして、このハンドラー対AsyncTask対スレッドを通過します

于 2013-03-26T07:14:35.650 に答える