Android: переопределить onPostExecute (), если AsyncTask.execute (new Runnable ()) вызывается в методе - PullRequest
0 голосов
/ 28 января 2020

У меня есть метод, который я хочу выполнить в фоновом потоке:

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() в этом случае?

Ответы [ 3 ]

0 голосов
/ 28 января 2020

Это может быть полезно, вы можете достичь этого по классу вместо метода. Пожалуйста, попробуйте следующий фрагмент:

@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 голосов
/ 28 января 2020

Для меня это работа

public class MyTask extends AsyncTask<String, Void, String>
{
    @Override
    protected Void doInBackground(String... params) {
        //Do background 
    }

    protected void onPostExecute() {
        foo2();
    }
}

void foo2(){
    //your function
}

Если вы хотите выполнить некоторую функцию после завершения Asynctask, вы также можете обновить пользовательский интерфейс из onPostExecute, что проще, если он работает для вас .

0 голосов
/ 28 января 2020

Вы не можете достичь напрямую, Вы можете сделать это через расширение класса Asyn c.

...