Método publishProgress debe ser llamado desde el subproceso de trabajo, hilo actualmente es inferido hilo principal

Sr. Heelis:

Hace poco REIMPORTADAS un proyecto perfectamente bien Android en Android Studio y ha decidido unilateralmente a quejarse (y rojo bajo garabato) de código que es definitivamente seguro.

Me sale este garabato rojo en el IDE cada vez (pero sólo en postExecute):

Método publishProgressdebe ser llamado desde el subproceso de trabajo, hilo actualmente es inferido hilo principal

private void triggerClick() { 

    final class LoginHttpTask
            extends
            AsyncTask<String/* Param */, Boolean /* Progress */, String /* Result */> {

        @Override
        protected String doInBackground(String... params) {
            publishProgress(true);
         }

        @Override
        protected void onPostExecute(String checkPhpResponse) {
            publishProgress(false);
        }   

   } 
   new LoginHttpTask.execute();
}

¿Cuál es la causa y por qué el código ejecuta perfectamente bien de todos modos?

IDE captura de pantalla.  Método debajo publishProgress garabato rojo

Michael Dodd:

Este es un problema de formación de pelusas. A partir de la documentación publishProgress(Params...)(mi negrita):

Este método se puede invocar desde doInBackground(Params...)a publicar actualizaciones sobre el hilo de interfaz de usuario , mientras que el cálculo de fondo aún se está ejecutando.

Por lo que este método está diseñado para ser llamado sólo en un subproceso de fondo, y esto se refleja en la fuente del método con la @WorkerThreadanotación:

@WorkerThread
protected final void publishProgress(Progress... values) {
    if (!isCancelled()) {
        getHandler().obtainMessage(MESSAGE_POST_PROGRESS,
                new AsyncTaskResult<Progress>(this, values)).sendToTarget();
    }
}

Así, mientras que doInBackground(String...)se ejecuta en un subproceso en segundo plano, onPostExecute(String checkPhpResponse)se ejecuta en el subproceso de interfaz de usuario como que está destinado a actualizar la interfaz de usuario directamente dentro de esa devolución de llamada. Debido a que publishProgress(Params...)está anotado como @WorkerThread, el IDE arroja un error a pesar de que el código se compilará - que funciona, pero es una mala práctica.

Sin ningún contexto aún más en cuanto a cómo su AsyncTaskse está utilizando no puedo aconsejarle sobre cómo actualizar el código, pero yo aconsejaría a evitar el uso publishProgress(boolean)y en lugar de actualizar la interfaz de usuario directamente desde dentroonPostExecute(String)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=236132&siteId=1
Recomendado
Clasificación