Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Asynctask DoInBackground () no se llama en Android Tablet

Trabajo en una aplicación en android He utilizado la clase Asynctask, Funciona bien cuando probé en mi dispositivo Android corriendo en 2.3.5, pero el problema que estoy enfrentando es, lo mismo no funciona para mi tableta 4.0.4

Durante la prueba, se supo que prexecute () se está llamando pero doInbackground () no se llama, sin embargo doInbackground () se está llamando en el dispositivo (2.3.5).

Una de las razones por las que creo que para el problema es que el procesador de Tablet es mucho más rápido que el de dispositivo, por lo que puede ser algunos problemas de hilo, dats por qué, para hacer frente a esto, he utilizado algunas banderas y Thread.sleep () En un ciclo de hacer mientras que cuando la condición es verdadera, funciona, pero no hay suerte, estoy atascado en el propio bucle. Aquí está mi código:

MyAsyncTask object = new MyAsyncTask (MainActivity.this); runOnUiThread(new Runnable() { public void run() { try { if (object.isReady() || !object.isStarting()) { return; } object.execute(); do { Thread.sleep(1000); } while (!object.isReady() && object.isStarting()); if(!object.isReady()) { return; } } catch (InterruptedException e) { e.printStackTrace(); } } }); 

AsynctaskClass:

 public class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{ private ProgressDialog dialog; private Context context; private boolean isStarting = false; private boolean isReady = false; public AsyncUpdatesofJquery(Context context) { this.context = context; isStarting = true; isReady = false; } public boolean isStarting() { return isStarting; } public boolean isReady() { return isReady; } @Override protected void onPreExecute() { isStarting = true; isReady = false; dialog = new ProgressDialog(context); dialog.setMessage("Downloading Files, Please wait..."); dialog.show(); } @Override protected Boolean doInBackground(Void... params) { isReady = true; isStarting = false; downloadFiles(context); // my background task return true; } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); context.startActivity(new Intent(context, NewActivity.class)); dialog.dismiss(); isReady = false; isStarting = false; } } 

One Solution collect form web for “Asynctask DoInBackground () no se llama en Android Tablet”

El modelo multi-threading cambió entre 2.3.5 y 4.0.4. AsyncTask ahora tiene por defecto tener todas las subclases en una aplicación que usa el mismo hilo (es decir, sólo se puede ejecutar un AsyncTask a la vez). Se explica aquí :

Cuando se introdujo por primera vez, AsyncTasks se ejecutaron en serie en un solo hilo de fondo. Comenzando con DONUT, esto fue cambiado a un grupo de hilos permitiendo que múltiples tareas funcionaran en paralelo. Comenzando con HONEYCOMB, las tareas se ejecutan en un solo hilo para evitar errores comunes de aplicación causados ​​por la ejecución en paralelo.

Si realmente desea una ejecución paralela, puede invocar executeOnExecutor (java.util.concurrent.Executor, Object []) con THREAD_POOL_EXECUTOR.

Con esto en mente, podría ser que otro AsyncTask está ejecutando en su aplicación, lo que impide que este de empezar. Eso explicaría por qué funciona bien en su dispositivo 2.3.5, pero no en su tableta 4.0.4.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.