gpt4 book ai didi

android - AsyncTask 延迟程序流/屏幕卡住

转载 作者:行者123 更新时间:2023-11-29 14:50:01 26 4
gpt4 key购买 nike

我有一个简单的登录屏幕。如果您单击“登录”,当我们在后台等待 AsyncTask 检查登录凭据时,应该会出现一个进度条。

如果我在没有 AsyncTask 的情况下在后台运行代码,我的进度条会立即出现。但是,如果我使用 AsyncTask(我在之后 设置了我的进度条,则应用程序会在我单击“登录”的那一刻卡住)。然后它一直等到 AsyncTask 得到结果(get() 命令),然后才解冻,使我的进度条无用

这是一个众所周知的问题吗?你是怎么解决的?

这就是我设置 AsyncTask 的方式,我显示进度条之后。

    showProgress(true, "Logging in ...");
mAuthTask = new InternetConnection();
String arguments = "email="+mEmail+"&pwd="+mPassword;
boolean k = mAuthTask.makeConnection("ADDRESS", arguments, getBaseContext());
String f = mAuthTask.getResult();

这是我的 AsyncTask。 downloadUrl() 设置一个 HttpURLConnection。这行得通,我测试过了。

    private DownloadData data = new DownloadData();
public boolean makeConnection(String url, String arguments, Context context) {
if(isWifi(context) || isMobile(context)) {
argsString = arguments;
data.execute(url);
return true;
} else {
return false; //No network available.
}
}

public String getResult() {
try {
return data.get();
} catch (InterruptedException e) {
return "Error while retrieving data.";
} catch (ExecutionException e) {
return "Error while retrieving data.";
}
}

private class DownloadData extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... url) {
try {
return downloadUrl(url[0]);
} catch (IOException e) {
return "Unable to retrieve data.";
}
}

最佳答案

这样做:

  @Override
protected void onPreExecute() {
Asycdialog.setMessage("Working");
Asycdialog.getWindow().setGravity(Gravity.CENTER_VERTICAL);
Asycdialog.getWindow().setGravity(Gravity.CENTER_HORIZONTAL);
Asycdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
Asycdialog.setCancelable(false);
//Dialog Show
Asycdialog.show();
super.onPreExecute();

然后在 onPostExecute 中:

protected void onPostExecute(String result) {
// hide the dialog

Asycdialog.dismiss();
super.onPostExecute(result);
}

使用来自不同类的相同异步任务:

    class MainActivity{
new MyTask().execute();
}



class DifferentActivity {
new MyTask().execute();//a new instance
}


class MyTask extends AsyncTask{
public MyTask(Context context){
}//Pass in context.
}

如果您想要一致的进度对话框,请将上下文传递给构造函数。

要从 doInBackground 发布进度,您可以使用以下方法:

publishProgress(progress);
Asycdialog.setMax(lines);
Asycdialog.incrementProgressBy(1);

其中 progress 是一个字符串,lines 是项目的最大数量。

关于android - AsyncTask 延迟程序流/屏幕卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459076/

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