gpt4 book ai didi

android - AsyncTask 期间 UI 卡住

转载 作者:行者123 更新时间:2023-11-29 17:57:51 32 4
gpt4 key购买 nike

当我的应用程序第一次启动时,它应该显示用户协议(protocol),这是一个 59kb 的 txt 文件。由于读取文件并将其附加到 TextView 需要一些时间,因此我决定在异步任务中执行此操作并在执行时显示进度条,但是进度条会卡住,直到文件附加到 TextView ,当发生这种情况时,应用程序需要一些时间来响应,有时会导致 ANR。这是我的异步任务代码:

  public class DownloadFilesTask extends AsyncTask<String, Integer, String> {

AlertDialog alertDialog = null;
Button getstarted, cancel;
TextView text2;
AlertDialog.Builder builder;
LayoutInflater inflater = (LayoutInflater) Profile.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.agreement, (ViewGroup) findViewById(R.id.layout_root));

protected void onPreExecute(){
progressDialog = ProgressDialog.show(Profile.this, "", "Loading.....", true);
getstarted=(Button) layout.findViewById(R.id.get_started);
cancel=(Button) layout.findViewById(R.id.cancel);

cancel.setVisibility(View.GONE);
text2 = (TextView) layout.findViewById(R.id.ag);

builder = new Builder(Profile.this);
builder.setView(layout);
alertDialog = builder.create();
alertDialog.setCancelable(false);
alertDialog.setTitle(getString(R.string.terms));
}

@Override
protected String doInBackground(String... arg0) {
StringBuilder sb = new StringBuilder();
try {
AssetManager am = getAssets();
InputStream in = am.open("EULA.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

String line = null;

while ((line = reader.readLine()) != null) {
sb.append(line);
}

in.close();


} catch(Exception e){

System.out.println("FILE NOT FOUND : "+ e.getMessage());
}

return sb.toString();
}
// This is called when doInBackground() is finished
protected void onPostExecute(String result) {
progressDialog.dismiss();
alertDialog.show();
text2.setText(Html.fromHtml(result));

}

// This is called each time you call publishProgress()
}

如您所见,我在 postExecute 方法中将文件附加到 TextView 。我应该改变我阅读文件的方式吗?或者是别的什么。提前致谢

最佳答案

首先,您可以使用 onProgressUpdate 来更新进度条。

为了避免您的 ANR,我怀疑 Html.fromHtml 是一个阻塞您的 UI 线程的昂贵调用。您可以在 doInBackground 方法中返回 Html 值并避免 UI 阻塞。

example of use onProgressUpdate to update the progress bar

关于android - AsyncTask 期间 UI 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061895/

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