1

我正在编写一个库,它执行一些密集的网络工作。所以,我使用 HandlerThread 来执行这个操作,如下所示:

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

LibraryHandlerThread 执行网络操作和其他耗时的操作。

当我从工作线程(主线程以外的任何线程)调用此代码时,它工作正常。但是抱怨“当一个已经处于活动状态的循环器时无法初始化另一个循环器”。我相信 Looper 默认在主线程上运行,并抱怨 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 回答
0

试试下面的代码:

private static final HandlerThread sWorkerThread = new HandlerThread("network-operations");
static {
    sWorkerThread.start();
}
private static final Handler sWorker = new Handler(sWorkerThread.getLooper());
于 2013-09-12T17:08:17.717 回答