gpt4 book ai didi

android - 如何在 AsyncTask 中显示和隐藏 Activity 的 ProgressBar?

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:16 24 4
gpt4 key购买 nike

我创建了一个单独的类,它扩展了我在整个应用程序中用于通信的 AsyncTask。我类的每个 Activity 都使用这个 AsyncTask 类进行通信。我想在通信进行时显示 ProgressBar( Activity 指示器)。如果我在使用通信类的 Activity 中显示和隐藏 ProgressBar,那么 ProgressBar 会卡住,直到通信完成。有什么方法可以在 AsyncTask 类的屏幕中间显示 ProgressBar,这样它就不会卡住,并且用户知道后台正在发生某些事情。我正在使用以下代码:

  public class MyActivity extends Activity {

ProgressBar spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity_layout);

spinner = (ProgressBar)findViewById(R.Id.progressbar);
spinner.setVisibility(ProgressBar.INVISIBLE);
}

protected void onResume()
{
super.onResume();
}

public void buttonClickHandler(View target){
try{
spinner.setVisibility(ProgressBar.VISIBLE);
String output = new SendRequest().execute().get();
spinner.setVisibility(ProgressBar.INVISIBLE);
}catch(Exception ex){
System.out.println("buttonClickHandler exception: "+ex);
}
}
}

AsyncTask 类是:

  public class SendRequestExample extends AsyncTask<ArrayList<String>, Void, String> {
public String result;

protected String doInBackground(ArrayList<String>... params) {

// doing communication
...

return result;
}
}

提前致谢。

最佳答案

你应该在 :

中显示你的进度条
SendRequestExample.onPreExecute()

并将其隐藏在:

SendRequestExample.onPostExecute()

方法。

如果您的 SendRequestExample 对许多 Activity 是通用的,那么您可以让 MyActivity 实现接口(interface),即:

interface ProgressBarAware {
void showProgressbar();
void hideProgressbar();
}

并将 ProgressBarAware 引用传递给您的 AsyncTask。在配置更改期间更新 AsyncTask 中的此引用很重要,这意味着每次 Activity.onCreate 在配置更改后执行。


还有一点:不要在 UI 线程的异步任务上使用 get(),调用“new SendRequest().execute().get();”。这会导致很多问题。它阻止 Android 使用消息队列来处理负责响应用户点击、绘制小部件等的消息。几分钟后,此类 UI 线程阻塞将以 ANR(应用程序未响应)结束,系统将终止您的应用程序。

关于android - 如何在 AsyncTask 中显示和隐藏 Activity 的 ProgressBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21528976/

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