1

私は集中的なネットワーク作業を行うライブラリを書いています。したがって、この操作を次のように実行するために HandlerThread を使用しています。

Looper.prepare();
libraryThread = new LibraryHandlerThread(context);
libraryThread.start();
libraryThread.getLooper();

LibraryHandlerThread は、ネットワーク操作とその他の時間のかかる操作を行います。

このコードをワーカー スレッド (メイン スレッド以外のスレッド) から呼び出すと、正常に動作します。しかし、「ルーパーが既にアクティブな場合、別のルーパーを初期化できない」という不満があります。ルーパーはデフォルトでメインスレッドで実行され、Looper.prepare() について不平を言うと思います。次のようなことを実行して、メイン スレッドから動作させることができます。

Looper.getMainLooper().quit();
Looper.prepare();
libraryThread = new LibraryHandlerThread(context);
libraryThread.start();
libraryThread.getLooper();

私の質問は、メイン スレッドへの影響はどうなるかということです。私の理想的な世界では、メイン スレッドに影響を与えることなく、ライブラリの操作を別のスレッドで実行したいと考えています。あまり破壊せずにこれを達成するにはどうすればよいですか?

4

2 に答える 2

0

調べたいのは、Asynctask を使用してこれをバックグラウンドで実行することです。これにより、メイン スレッドが動作し続けることができますhttp://developer.android.com/reference/android/os/AsyncTask.html

または、これが常に実行する必要がある場合は、サービスを作成できます。http://developer.android.com/reference/android/app/Service.html

于 2013-09-12T17:03:08.333 に答える