Soy muy nuevo en la programación y tengo algunas dudas.
Tengo un AsyncTaskque es lo que llamo RunInBackGround.
y comienzo este proceso como:
new RunInBackGround().execute();
Pero deseo esperar hasta que esta llamada termine de ejecutarse, antes de continuar con las otras declaraciones de código.
¿Cómo puedo hacer eso?
¿Hay alguna forma de hacerlo?

Respuestas:
Deberá llamar al método AsyncTask.get () para recuperar el resultado y esperar hasta que la
doInBackgroundejecución no se complete. pero esto congelará el hilo de la IU principal si no llama al método get dentro de un hilo .Para recuperar el resultado en el hilo de la interfaz de usuario, comience
AsyncTaskcomo:String str_result= new RunInBackGround().execute().get();fuente
AsyncTasksingetmétodo y en AsyncTaskonPostExecutese llama al método que proporciona u resultados en el hilo principal de la interfaz de usuarioawaitinc#, y no bloquee el hilo principal, por supuestoAunque de manera óptima sería bueno si su código se puede ejecutar en paralelo, puede darse el caso de que simplemente esté usando un hilo para no bloquear el hilo de la interfaz de usuario, incluso si el flujo de uso de su aplicación tendrá que esperar.
Tienes prácticamente 2 opciones aquí;
Puede ejecutar el código que desea esperar, en la propia AsyncTask. Si tiene que ver con la actualización de la interfaz de usuario (hilo), puede usar el método onPostExecute. Esto se llama automáticamente cuando se realiza el trabajo en segundo plano.
Si por alguna razón se ve obligado a hacerlo en la Actividad / Fragmento / Lo que sea, también puede convertirse en un oyente personalizado, que transmite desde su AsyncTask. Al usar esto, puede tener un método de devolución de llamada en su Actividad / Fragmento / Lo que sea que solo se llame cuando lo desee: también conocido como cuando su AsyncTask haya terminado con lo que tuvo que esperar.
fuente
En su
AsyncTaskagregar un ProgressDialog como:private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);puede establecer el mensaje en un
onPreExecute()método como:this.dialog.setMessage("Processing..."); this.dialog.show();y en tu
onPostExecute(Void result)método descarta tuProgressDialog.fuente
AsyncTask tiene cuatro métodos.
onPreExecute -- for doing something before calling background task in Async doInBackground -- operation/Task to do in Background onProgressUpdate -- it is for progress Update onPostExecute -- this method calls after asyncTask return from doInBackground.puede llamar a su trabajo en
onPostExecute()llamadas después de regresar dedoInBackground()onPostExecute es lo que necesita implementar.
fuente
Creo que la forma más sencilla es crear una interfaz para obtener los datos de onpostexecute y ejecutar la Ui desde la interfaz:
Crea una interfaz:
public interface AsyncResponse { void processFinish(String output); }Entonces en asynctask
@Override protected void onPostExecute(String data) { delegate.processFinish(data); }Entonces en tu actividad principal
@Override public void processFinish(String data) { // do things }fuente