import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView resultTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
resultTextView = findViewById(R.id.resultTextView);
// 启动异步任务
MyAsyncTask asyncTask = new MyAsyncTask();
asyncTask.execute();
}
// AsyncTask 的三个泛型参数分别是:Params(传入参数类型)、Progress(进度更新类型)、Result(执行结果类型)
private class MyAsyncTask extends AsyncTask<Void, Void, String> {
// 在后台线程中执行任务
@Override
protected String doInBackground(Void... voids) {
// 模拟耗时任务
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 返回执行结果
return "Task completed!";
}
// 在主线程中更新 UI
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// 更新界面
resultTextView.setText(result);
}
}
}
在这个示例中,我们创建了一个 MyAsyncTask 类,继承自 AsyncTask。我们通过三个泛型参数指定了传入参数的类型、进度更新的类型和执行结果的类型。在 doInBackground 方法中,我们执行后台任务,这里是模拟一个耗时任务。在 onPostExecute 方法中,我们更新 UI,这里是将执行结果显示在 resultTextView 中。
使用 AsyncTask 时,需要注意以下几点:
1. doInBackground 方法中的代码在后台线程执行,用于执行耗时任务。
2. onPostExecute 方法中的代码在主线程执行,用于更新 UI。
3. execute 方法用于启动异步任务。
需要注意的是,AsyncTask 在 Android 11 及以上的版本中,不再建议使用,因为它有一些限制和问题。推荐使用 Executor 框架和 ViewModel 与 LiveData 的结合来执行异步任务,以更好地处理长时间运行的任务和避免内存泄漏问题。
转载请注明出处:http://www.zyzy.cn/article/detail/15167/Android