gpt4 book ai didi

java - Android 线程 - 从另一个线程运行一个线程并等待处理程序消息

转载 作者:行者123 更新时间:2023-12-01 05:20:59 25 4
gpt4 key购买 nike

我的应用程序使用执行器创建线程来执行任务。

我有一个线程,可以在需要时加载位图并将其返回到主线程。

如果本地没有找到位图,则使用另一个线程来下载文件。

所有线程都会创建一个 Looper 以确保可以从该线程创建 Handler(以防需要通过向 Handler 发送消息来与另一个线程对话)

public class LooperThread extends Thread
{
@Override
public void run()
{
Looper.prepare();
super.run();
Looper.loop();
}
}

主线程请求Thread-1获取位图。如果该位图存在,则成功返回到主线程。如果位图不存在,Thread-1 会要求 Thread-2 下载它。在 Thread-1 上创建一个处理程序,以便 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 中运行无限循环,以便它可以保持 Activity 状态并继续处理消息,直到它被中断,但我不确定如何正确执行此操作。

有人知道正确的做法吗?

最佳答案

我不确定你是否想这样做,但你可以在 thread-1 中尝试类似的代码

if(bitmapIsntFound)
{
Thread-2.start();
try
{
Thread-1.wait();
}

catch(InterruptedException e)
{
System.out.println("Thread-1
}

}

这将启动第二个线程来下载位图,然后告诉第一个线程等待,而第二个线程继续运行。第二个下载完成后,您将需要调用 Thread-1.notify() 来重新启动 Thread-1。

因为您在中途暂停了 Thread-1,所以它不会越过 try{ } catch(){ } 语句,因此保证在 Thread-1 恢复时下载完成,您只需将其调用到线。

关于java - Android 线程 - 从另一个线程运行一个线程并等待处理程序消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com