Uso en profundidad de AbilitySlice of Hongmeng Intermediate (conocimiento básico del desarrollo de HarmonyOS Hongmeng)

AbilitySlice

Como la unidad básica de Ability usando plantillas de página, AbilitySlice proporciona funciones con operadores para la lógica del servicio y la visualización de la interfaz de usuario.
Una capacidad puede tener varios segmentos de capacidad. Debe anular el método Ability # onStart (Intent) para especificar el segmento de habilidad predeterminado. Especifique esta ruta predeterminada utilizando Ability # setMainRoute (String).

Puede heredar la clase AbilitySlice para implementar su propio segmento de habilidad y establecer su interfaz de usuario en el método onStart (ohos.aafwk.content.Intent). Puede usar setUIContent (ohos.agp.components.ComponentContainer) o setUIContent (int) para configurar la interfaz de usuario. Generalmente, en todo el ciclo de vida de un segmento funcional, solo necesita configurar la interfaz de usuario una vez. Código de muestra:

 public class MyAbilitySlice extends AbilitySlice {
     protected void onStart(Intent intent) {
         super.onStart(intent);
         // setup UI content from a layout resource
         setUIContent(R.res.layout);
     }
 }

El código anterior solo define la ruta de entrada en tiempo de ejecución. Para exponer las capacidades de la capacidad a otras capacidades, el campo de operación debe registrarse en el archivo de configuración config.json. Código de muestra:

 {
     "module":{
         ...
         "abilities":[
           {
               ...
               "description": "Main ability of hiworld",
               "name": ".MainAbility",
               "label": "main ability",
               "icon": "main-ability.png",
               "type": "page",
               "visible": true,
               "orientation": "unspecified",
               "launch-mode": "standard",
               "skills"[
                   {
                       "actions":[
                           "action.pay",
                           "action.scan"
                       ]
                   }
               ]
               ...
           }
         ]
         ...
     }
 }
 

Después de registrar las acciones admitidas de la forma anterior, otras habilidades pueden usar sus habilidades a través de las acciones especificadas y abrir directamente las secciones de habilidad correspondientes. Código de muestra:

     
     Intent intent = new Intent();
     Operation operation = new Intent.OperationBuilder()
             .withAction("action.pay")
             .withDeviceId("")
             .withBundleName("xxx")
             .withAbilityName("yyy")
             .build();
     intent.setOperation(operation);
     startAbility(intent);
     

Ciclo de vida de AbilitySlice

El ciclo de vida de un segmento de capacidad está relacionado con la capacidad de transportarlo. El segmento de función tiene el mismo estado de ciclo de vida y el mismo método de devolución de llamada de ciclo de vida que la función de host. Una vez que se cambia el estado del ciclo de vida de una habilidad, su segmento de habilidad sufrirá el mismo cambio y se llamará al mismo método de devolución de llamada. Los sectores funcionales también pueden tener cambios de ciclo de vida independientes. Este cambio independiente ocurre durante el corte de habilidad en la habilidad de cambio. Sin embargo, tal cambio no afectará el ciclo de vida de las capacidades del host.

Los segmentos de capacidad tienen los siguientes cuatro estados de ciclo de vida:

  • Inicial: el segmento de capacidad se ha cargado en la memoria, pero no se está ejecutando. Es el estado inicial de todos los segmentos de capacidad.
  • Inactivo: el segmento de capacidad se carga y ejecuta, pero no es interactivo. Por lo general, es un estado intermedio antes de que el segmento de capacidad se vuelva ACTIVO o Fondo. En este estado, la interfaz de usuario del segmento funcional puede ser visible, pero los eventos de entrada no se pueden recibir.
  • Actividad: el segmento de habilidad es visible e interactivo. Piense que el segmento de capacidad tiene el foco.
  • Fondo: los segmentos de capacidad no son visibles. Si la habilidad del anfitrión también está en segundo plano, la habilidad y el corte de habilidad se destruirán en caso de memoria insuficiente.
    De manera similar a las funciones, los segmentos de funciones proporcionan los siguientes métodos de devolución de llamada del ciclo de vida. Puede sobrescribirlos.
 
  public class MainAbilitySlice extends AbilitySlice {
      protected void onStart(Intent intent);
 
      protected void onActive();
 
      protected void onInactive();
 
      protected void onForeground(Intent intent);
 
      protected void onBackground();
 
      protected void onStop();
  }
 
 

La siguiente figura muestra el ciclo de vida completo de un segmento de capacidad. Un segmento de capacidad solo puede estar en un estado en cualquier momento. No todos los estados apoyan la transición directa.

image.png

Nota: El método onStart (ohos.aafwk.content.Intent) solo se puede llamar una vez en todo el ciclo de vida.

A continuación, se proporciona el significado de cada método de devolución de llamada del ciclo de vida y algunas sugerencias de mejores prácticas.

  • onStart (ohos.aafwk.content.Intent): este método debe implementarse para la configuración de inicialización de la interfaz de usuario, como setUIContent (int). Este método solo se puede llamar una vez en todo el ciclo de vida. La persona que llama puede usar la clase Intent para llevar algunas claves personalizadas y obtener estos parámetros a través de los métodos proporcionados por la intención.
  • onActive (): este método se llamará cuando la pieza de función vuelva al estado activo. Después de la devolución de llamada, la interfaz de usuario es interactiva.
  • onInactive (): este método se llamará cuando el segmento de capacidad esté completo o parcialmente cubierto. Después de la devolución de llamada, la interfaz de usuario no es interactiva.
  • onForeground (ohos.aafwk.content.Intent) ()}: este método se llamará cuando la película vuelva al primer plano. La lógica de interacción de la aplicación se puede restaurar o inicializar en la devolución de llamada. Si es necesario especificar un nuevo parámetro personalizado cuando el segmento de capacidad vuelve al primer plano, se puede transmitir el nuevo parámetro de intención.
  • onBackground (): este método se llamará cuando el segmento de capacidad entre en segundo plano. En este estado, no puede realizar tareas en segundo plano durante mucho tiempo porque el sistema puede detener los programas en segundo plano en cualquier momento.
  • onStop (): llame a este método para destruir el segmento de capacidad. Puede utilizar este método para recuperar recursos.
    Cambio entre segmentos de capacidad
    Puede usar el método actual (ohos.aafwk.ability.AbilitySlice, ohos.aafwk.content.Intent) para presentar un nuevo segmento de capacidad y usar Intent para transmitir parámetros personalizados. Código de muestra:
 
     Button button = new Button(this);
     button.setClickedListener(listener -> {
         AbilitySlice targetSlice = new MyAbilitySlice();
         Intent intent = new Intent();
         intent.setParam("value", 10);
         present(targetSlice, intent);
     });
 

Nota: Se puede mostrar un máximo de 1024 sectores de habilidad en una habilidad. Si intenta mostrar el segmento de habilidad 1025, el sistema forzará la habilidad a bloquearse. Para evitar esto, si necesita mostrar una gran cantidad de segmentos de capacidad al mismo tiempo, debe mejorar el código.


Se prohíbe la reimpresión no autorizada


Para intercambios más técnicos, únase al grupo QQ

Nombre del grupo: harmonyos Hongmeng Technology Exchange
Group number: 856567895


Empiece de cero para aprender sobre el desarrollo de HarmonyOS Hongmeng 2.0

Supongo que te gusta

Origin blog.csdn.net/iCloudEnd/article/details/108734793
Recomendado
Clasificación