AsyncTask 用于在后台线程中执行耗时的异步操作,以免阻塞主线程。通常,AsyncTask 应该在主线程中实例化,然后在后台线程中执行操作。不同的操作可以在不同的方法中实现,例如 doInBackground(),onPostExecute(),onProgressUpdate() 等。 普通代码可以在任何地方运行,包括主线程和后台线程。如果普通代码需要执行耗时操作,则需要在后台线程中执行,以免阻塞主线程。 下面是一个示例,演示了如何使用 AsyncTask 和普通代码,以正确的方式执行异步操作:
public class MyActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mTextView = findViewById(R.id.textView);
// 实例化 AsyncTask,并在主线程中执行
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
}
// 在这里实现 AsyncTask
private class MyAsyncTask extends AsyncTask {
@Override
protected String doInBackground(Void... voids) {
// 在后台线程中执行耗时操作
return doSomeLongRunningTask();
}
@Override
protected void onPostExecute(String result) {
// 在主线程中更新 UI
mTextView.setText(result);
}
}
private String doSomeLongRunningTask() {
// 执行耗时操作
return "Task completed!";
}
}
在这个示例中,MyAsyncTask 在主线程中实例化,并且在 doInBackground() 方法中执行耗时操作。onPostExecute() 方法在操作完成后在主线程中更新 UI。同时,doSomeLongRunningTask() 方法在后台线程中执行耗时操作。