La actualización del control de subproceso principal de la interfaz de usuario completa la tarea asincrónica de esta actividad

  SingleMessageView utilizado en el proyecto, después de instanciar el control, haga clic en el avatar del usuario, luego vaya a UserInfo para ver el avatar del usuario, el nombre de usuario, la firma y la etiqueta.
  
  Antes, mi hermano escribió una respuesta de clic del avatar en SingleMessage, hizo clic en el avatar del usuario, pasó el nombre de usuario del usuario a UserInfo por intención, y al mismo tiempo ejecutó una tarea asincrónica que quería que el servidor obtuviera la firma y la etiqueta del usuario. Pásalo por la misma intención, luego la función onResume () de UserInfo recibe la intención de actualizar el diseño de la interfaz de usuario del hilo principal. El código fuente es el siguiente:
  
  bubuko.com, botón Bubu
  
  // respuesta de avatar de otro usuario
  
  Private ImageView.OnClickListener userHeadImgViewListener = new ImageView .OnClickListener () {
  
  @Override
  
  public void onClick (View v) {
  
  String userNameTemp = users_name;
  
  String otheruserData [] = {""};
  
  otheruserData [0] = userNameTemp; // Obtenga el nombre de usuario
  
  // establezca un enlace de red, ejecute la solicitud Tareas asincrónicas firmadas y etiquetadas
  
  ConnectivityManager connMgr = (ConnectivityManager) mContext.getSystemService (Context.CONNECTIVITY_SERVICE);
  
  NetworkInfo networkInfo = connMgr.getActiveNetworkInfo ();
  
  if (networkInfo! = null && networkInfo.isConnected ()) {
  
  asyncWebkForOtherinfo = new webTaskForOtherinfo ();
  
  if (android.os.Build.VERSION.SDK_INT> android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
  
  asyncWebkForOtherinfo.executeOnExecutor (
  
  webTaskForOtherinfo.THREAD_POOL_EXECUTOR, otheruserData);
  
  } else {
  
  asyncWebkForOtherinfo.execute (otheruserData);
  
  }
  
  Log.e ("otherinfodown", "有 网!");
  
  } else {
  
  Log.e ("otherinfodown", "没有 网络 连接 , 请 联网 后 重 试 ...");
  
  }
  
  // TODO Método de generación automática stub
  
  ARUtils.own_information = false;
  
  Intención intento = nuevo intento (SingleMessageView.this.getContext (), UserInfoActivity.class);
  
  intent.putExtra ("nombre", nombre_usuario);
  
  intent.putExtra ("etiqueta", firma de otros); // Obtenga la etiqueta devuelta por la tarea asincrónica y Firma
  
  intent.putExtra ("sign", otherlabel);
  
  String head_img_url = getAppPath () + "/ user_portrait /" + users_name + ".
  
  Jpg "; intent.putExtra ("head_img_url", head_img_url);
  
  intent.setFlags (Intent.FLAG_ACTIVITY_NEW ; // El indicador se usa para distinguir qué actividad pasó la intención
  
  SingleMessageView.this.getContext (). StartActivity (intent);
  
  Log.v ("head_img_click", "success");
  
  }
  
  };
  
  bubuko.com, Bubu Abróchate el
  
  onResume () de userInfo:
  
  bubuko.com,Botón de tela
  
  // Obtenga el nombre de usuario de la intención, la ruta del avatar, la etiqueta y la firma en onResume
  
  Intent intent = getIntent ();
  
  String other_head_img_url = intent.getStringExtra ("head_img_url");
  
  String name = intent.getStringExtra ("name");
  
  String label = intent.getStringExtra ("label");
  
  String sign = intent.getStringExtra ("sign");
  
  userNameText. setText (nombre);
  
  signatureConent.setText (etiqueta);
  
  myTab.setText (signo);
  
  Bitmap smallBitmap = ARUtils.loadBitmapFile (other_head_img_url, 48, 48);
  
  userImgButton.setImageBitmap (smallBitmap);
  
  bubuko.com, Bubuko
  
  es el resultado de la depuración : La firma y la etiqueta obtenidas en singleMessage no se pueden obtener de la intención. . . De acuerdo con la lógica normal, pensar en realizar tareas asincrónicas, asignar valores a las variables globales, firmar y etiquetar, y luego regresar al método de respuesta del avatar del usuario, y luego realizar la operación de paso intencional. La razón por la cual la lógica no se ejecuta normalmente es que la tarea asincrónica es un Clase muy libre, restringe demasiada libertad a los demás. . .
  
  El tiempo de ejecución y el retorno de la tarea asincrónica no están bajo el control del subproceso principal ui. El subproceso principal no esperará obedientemente la ejecución de la tarea asincrónica y luego ejecutará las instrucciones debajo de la tarea asincrónica, de modo que el significado de la tarea asincrónica ya no esté allí. .
  
  Por lo tanto, la operación de actualizar el subproceso principal de la interfaz de usuario debe colocarse en el método de publicación de la tarea asincrónica. ¿Qué debe hacer el subproceso principal? Ya que ha utilizado la tarea asincrónica, deje que la tarea asincrónica termine lo que ha hecho y ¡La posición de la tarea debe colocarse en la misma actividad que el hilo principal de la interfaz de usuario!
  
  Entonces, al final, nuestra solución es hacer clic en el avatar del usuario en singleMessage, pasar el nombre de usuario a través de la intención y saltar a userInfo al mismo tiempo, en onResume () de userInfo, después de recibir la intención, ejecute la información personalizada otherInfo (othername ), El método otherInfo (String othername), ejecuta la tarea asincrónica webTaskForOtherINfo (); pasa el nombre de usuario a la tarea asincrónica, y luego define la clase webTaskForOtherINfo () en UserInfo, ejecuta la etiqueta de solicitud y la tarea de firma desde el servidor, y publica Realice la actualización del control UI de actualización en ok. . . . . .

Supongo que te gusta

Origin www.cnblogs.com/aquariusunny/p/12729879.html
Recomendado
Clasificación