Android:如果在方法中调用了AsyncTask.execute(new Runnable()),则重写onPostExecute()

问题描述 投票:0回答:3

我有一个要在后台线程上执行的方法:

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()

java android android-asynctask
3个回答
0
投票

您不能直接实现,可以通过扩展Async类来完成。


0
投票

这可能会有所帮助,您可以通过类而不是方法来实现。请尝试以下代码段:

@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();

      }
   }

0
投票

这对我有用

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,这更简单如果它适合您。

© www.soinside.com 2019 - 2024. All rights reserved.