gpt4 book ai didi

android - 从 AsyncTask 返回数据而不阻塞 UI

转载 作者:可可西里 更新时间:2023-11-01 18:45:48 26 4
gpt4 key购买 nike

我有一个与 AsyncTask 类相关的概念性问题。我们使用 AsyncTask 这样主 UI 就不会被阻塞。但是假设,我想从设备的内存中检索一些数据,为此我使用 AsyncTask 类。相关代码行如下(假设返回的数据类型为String):

  //code
String data = new ExtendedAsyncTask().execute(param1, param2).get();
//use this returned value.

上面的行不会阻塞 UI,破坏使用 AsyncTask 的目的吗?如果是,那么如何在不阻塞 UI 的情况下获取相关数据?我想补充一点,下一行代码将需要此数据来执行某些任务,因此取决于返回值。

谢谢

最佳答案

get() 方法将阻塞 UI 线程。要获取相关数据,您需要从 doInBackground 返回值并捕获 onPostExecute 参数中的值。

Value returned by doInBackground is captured by onPostExecute method

例子:

public class BackgroundTask extends AsyncTask<String, Integer, String >{
private ProgressDialog mProgressDialog;
int progress;
public BackgroundTask() {
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setMax(100);
mProgressDialog.setProgress(0);
}

@Override
protected void onPreExecute() {
mProgressDialog =ProgressDialog.show(context, "", "Loading...",true,false);
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values) {
setProgress(values[0]);
}

@Override
protected String doInBackground(String... params) {
String data=getDatafromMemoryCard();

return data; // return data you want to use here
}
@Override
protected void onPostExecute(String result) { // result is data returned by doInBackground
Toast.makeText(context, result, Toast.LENGTH_LONG).show();
mProgressDialog.dismiss();
super.onPostExecute(result);
}
}

If you are using asynctask in separate class, then use AsyncTask with callback interface like this

这是我之前提供的关于相同 AsyncTask with Callback 的答案

关于android - 从 AsyncTask 返回数据而不阻塞 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635436/

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