gpt4 book ai didi

java - 在不同线程和独立类中处理互联网连接

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

我正在尝试使用 AsyncTask 运行通过互联网访问 http 的后台线程。

当我想使用单独的帮助器类来处理 http 时,问题就出现了。

我想把它放在一个单独的类上的原因是为了有一个更清晰的划分代码,将 UI 功能与不同类中的 http 功能分开。所以我不想在UI类上有任何与http相关的东西,我只想调用这个分离的http帮助器类来处理http。

所以我对如何与主线程通信(仅用于计时)感到困惑,因为 AsyncTask 方法 onPostExecute 实际上可以访问 UI,但我不希望 http 帮助程序类必须处理 UI 。我应该在 http 帮助程序类中使用公共(public)字段,然后在主线程中使用一个循环来检查它的状态吗?

同样,我希望将 UI 内容放在一个类中,将 http 内容放在另一个仅处理 http 内容的类中。

沟通和实现这一目标的最佳方式是什么?

提前致谢!

最佳答案

执行此操作的一般方法是通过回调。您可以定义一个接口(interface),其中包含事件发生时应调用的函数,例如 onHttpSuccess()。您使 UI 类(可能是您的 Activity)实现该接口(interface)。然后,您将该接口(interface)的实例传递到构造函数中的 AsyncTask 中。基本上,您可以将 doInBackground 移至另一个类,并在构造函数中完成 onPreExecute 和 onPostExecute 的所有实际工作。

您的 AsyncTask 看起来像(伪代码):

class HttpTask extends AsyncTask{
public interface HttpCallback{
onHttpStart();
onHttpSuccess();
onHtpFail();
}
private HttpCallback mHttpCallback;
public HttpTask(Context, HttpCallback cb){
mHttpCallback = cb;
}
onPreExecute(){
mHttpCallback.onHttpStart();
}
doInBackground(){
//Do the HTTP transfer
}
onPostExecute(){
mHttpCallback.onHttpSuccess();
}
}

以及您的 Activity 类别

class MyActivity extends Activity implements HttpCallback{
onHttpStart(){
//Perform any start UI work
}
onHttpSuccess(){
//Update the UI
}
}

关于java - 在不同线程和独立类中处理互联网连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27587129/

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