我有一个要在后台线程上执行的方法:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
foo();
}
public static void foo(){
AsyncTask.execute(() -> {
// perform some object creations
});
}
public static void foo2(){
// Method that updates UI (lists and views) which requires the main thread.
}
}
我想在foo2
完成即AsynTask
时执行onPostExecute()
。在这种情况下如何覆盖onPostExecute()
?
您不能直接实现,可以通过扩展Async类来完成。
这可能会有所帮助,您可以通过类而不是方法来实现。请尝试以下代码段:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
foo asyncTask=new foo();
asyncTask.execute();
}
private class foo extends AsyncTask<void, void, void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void doInBackground(String... strings) {
}
@Override
protected void onPostExecute() {
super.onPostExecute();
foo2 asyncTask=new foo2();
asyncTask.execute();
}
}
private class foo2 extends AsyncTask<void, void, void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void doInBackground(String... strings) {
}
@Override
protected void onPostExecute() {
super.onPostExecute();
}
}
这对我有用
public class MyTask extends AsyncTask<String, Void, String>
{
@Override
protected Void doInBackground(String... params) {
//Do background
}
protected void onPostExecute() {
foo2();
}
}
void foo2(){
//your function
}
如果要在异步任务完成后执行某些功能,您还可以从onPostExecute内更新UI,这更简单如果它适合您。