gpt4 book ai didi

android - 从 AsyncTask 或服务通知 UI 组件的最佳实践

转载 作者:行者123 更新时间:2023-11-29 16:07:47 25 4
gpt4 key购买 nike

我一直在阅读如何使用 AsyncTask 类来执行较短的后台操作,以及用于持久操作的服务。

那么在使用 AsyncTask 类时,Android 中通知 UI 后台进程变化的最佳实践是什么?我应该使用经典的 MVC 模型并创建一个监听器(最好在扩展 Application 类的类中)还是在 Android 中有这样做的标准方法?

我读过 AsyncTask reference例如,onProgressUpdate() 方法似乎仅在任务本身中使用 ProgressDialog 时才有用。

谢谢!

最佳答案

如果要更新的组件是启动更新作业的组件(通过 AsyncTask 或服务),您可能应该使用内部 AsyncTask

AsyncTask 为您提供了两种更新 UI 的可能性:

  • 要在执行 doInBackground() 任务的同时更新 UI(例如,更新 ProgressBar),您必须在 doInBackground() 方法中调用 publishProgress()。然后您必须在 onProgressUpdate() 方法中更新 UI。
  • 要在任务完成时更新 UI,您必须在 onPostExecute() 方法中执行此操作。

参见:
doInBackground()
publishProgress()
onProgressUpdate()
onPostExecute()

编辑:

public class Home extends Activity implements OnClickListener {
private Button mButton;
private TextView mTextView;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
mButton = (Button) findViewById(R.id.myButton);
mTextView = (TextView) findViewById(R.id.myTextView);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.myButton:
(new MyAsyncTask()).execute();
break;
default:
break;
}
}

private class MyAsyncTask extends AsyncTask<String, int[], Boolean> {

/** This method runs on a background thread (not on the UI thread) */
@Override
protected String doInBackground(String... params) {
for (int progressValue = 0; progressValue < 100; progressValue++) {
publishProgress(progressValue);
}
}

/** This method runs on the UI thread */
@Override
protected void onProgressUpdate(Integer... progressValue) {
// TODO Update your ProgressBar here
mTextView.setText("Updating : " + progressValue + "/100");
}

/**
* Called after doInBackground() method
* This method runs on the UI thread
*/
@Override
protected void onPostExecute(Boolean result) {
// TODO Update the UI thread with the final result
mTextView.setText("Update complete !");

}
}
}

你可以找到另一个例子here .

关于android - 从 AsyncTask 或服务通知 UI 组件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16595374/

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