我的应用程序使用 Executor 创建线程来执行任务。
我有一个线程,它在需要时加载位图并将其返回到主线程。
如果在本地找不到位图,则使用另一个线程来下载文件。
所有线程都创建一个 Looper 以确保可以从该线程创建处理程序(以防它需要通过向处理程序发送消息来与另一个线程通信)
public class LooperThread extends Thread
{
@Override
public void run()
{
Looper.prepare();
super.run();
Looper.loop();
}
}
主线程要求 Thread-1 获取位图。如果位图存在,则成功返回给主线程。如果位图不存在,Thread-1 要求 Thread-2 下载它。在 Thread-1 上创建了一个 Handler,因此 Thread-2 可以使用它来告诉 Thread-1 何时下载完成。
问题是 Thread-1 完成执行并在下载完成之前退出,因此当 Thread-2 通过处理程序发送消息时,没有任何东西可以处理该消息。
final RequestHandler handler = new RequestHandler()
{
@Override
protected void onComplete(Object response)
{
//This never happens as Thead-1 is already finished when download is complete
DownloadCompleteData data = (DownloadCompleteData)response;
onDownloadComplete(data.success, data.downloadId, data.filePath);
}
};
myExecutor.execute(new Runnable()
{
public void run()
{
//blocking download call
DownloadCompleteData data = download(downloadRequest);
//Thread-2 now sends message back to Thread-1
handler.sendMessage(handler.obtainMessage(COMPLETE, data));
}
});
我认为我需要在 Thread-1 中运行一个无限循环,以便它可以保持活动状态并继续处理消息,直到它被中断,但我不确定如何正确执行此操作。
有人知道正确的方法吗?