El uso de Android encaminamiento -ARouter y problemas marco encontró

En primer lugar, un enrutamiento básico página de introducción

1. ¿Qué es la página de enrutamiento

  Saltar la página de relaciones de correspondencia que contiene la URL salto salto correspondiente, y se pasó los valores, interceptores y otras funciones.

2. ¿Por qué las páginas que utilizan el enrutamiento

  En el desarrollo androide original, cuando necesitamos salto de página, lo normal redactado como sigue:

Intent intent = new Intent(mContext, XXActivity.class);
intent.putExtra("key","value"); startActivity(intent); Intent intent = new Intent(mContext, XXActivity.class); intent.putExtra("key","value"); startActivityForResult(intent, 100); 

La redacción anterior propenso a las siguientes preguntas:

  1. Multijugador tiempo de desarrollo de colaboración, todos vamos AndroidManifest.xml definido de diversas IntentFilter, la intención implícita, finalmente encontró AndroidManifest.xml lleno de todo tipo de Schame, varios Path, a menudo necesitan para resolver ruta de cobertura superpuestas, demasiado La actividad se exporta, causando riesgos de seguridad y otras cuestiones
  2. proceso de salto no puede intervenir: saltar directamente a través de Intención, los desarrolladores de procesos no pueden saltar las intervenciones, algunas de las cosas orientadas a aspectos difíciles de implementar, decir que este inicio de sesión lógica muy genérico, enterrado, en cada juicio subpágina muy razonable, después de todo, la actividad se ha creado una instancia
  3. Cruz-módulo no puede explícitamente confiar: cuando la aplicación a pequeña escala, que va a hacer la división horizontal de aplicaciones, de acuerdo con la división de negocios en múltiples sub-módulos, entre completamente desacoplado, la aplicación por el embalaje de la función de control de proceso, tan fácil de manejar grandes multijugador colaboración en equipo, la lógica no interfieren entre sí, esta vez de confiar en salto intención implícita, escribiendo en problemas, el éxito es difícil de controlar

    En segundo lugar, la página de introducción de enrutamiento marco ARouter

    1. Características comunes

    Saltar en la página de solicitud

    Añadir dependientes

    Consejos: versión de la API y el número de versión del compilador de necesidad hasta la fecha. La última versión se puede encontrar en Github.

    Reescribir la aplicación e inicializar ARouter    página de configuración para saltar

  4. Saltar simple página

  5. 温馨提示:支持数据类型如下: 
    
    //基础类型
    .withString (String key, valor String) 
    (clave de cadena, valor booleano) .withBoolean 
    (String key, valor char) .withChar 
    (String key, valor a corto) .withShort 
    .withInt (String key, int value) 
    (String key, valor de largo) .withLong 
    (String key, valor doble) .withDouble 
    (String key, valor de byte) .withByte 
    (String key, valor flotante) .withFloat 
    clave .withCharSequence (String, CharSequence valor) 
    
    //数组类型
    .withParcelableArrayList (String key, ArrayList <? extiende parcelable>) valor 
    (String key .withStringArrayList, ArrayList <String> valor) 
    .withIntegerArrayList (String key, ArrayList <Integer> valor)
    .withSparseParcelableArray (String key, SparseArray <? extiende parcelable> valor) 
    (String key, byte [] valor) .withByteArray
    (String key, ArrayList <CharSequence> valor) .withCharSequenceArrayList 
    .withShortArray (String key, valor short []) 
    (String key, char [] Valor) .withCharArray 
    .withFloatArray (String key, flotador] [valor) 
    (clave .withCharSequenceArray Cadena , CharSequence [] valor) 
    
    // Bundle类型
    .with (Bundle bundle) 
    
    // Actividad跳转动画
    .withTransition (int enterAnim, int exitAnim) 
    
    //其他类型
    .withParcelable (String key, valor parcelable) 
    (String key .withParcelableArray, parcelable valor []) 
    (clave .withSerializable String, valor Serializable) 
    .withTransition (int enterAnim, int exitAnim)
    

    Problemas encontrados: Tres

    • ARouter.getInstance () de inyección (este); .
      Tenemos un modo de inicio de la actividad singletask , métodos onNewIntent de llamadas ARouter.getInstance().inject(this);no son parámetros, consulte ARouter generado en el proceso de construcción, el código puede saber que se trata de una llamada para obtener la actividad getIntent parámetros, pero onNewIntent de la intención y la intención en el método onCreate no es lo mismo, por lo que es necesario llamar método método onNewIntent setIntent, entonces se puede obtener los parámetros.

      ARouter :: Compiler >>> Sin módulo de nombre, para más información, ver. En Gradle ingrese
      todos los elementos de inspección módulo son dependientes módulo módulo dependiente (sin módulo de la página puede ser considerado), además de en cada módulo en build.gradle el siguiente código.

    defaultConfig { 
        
            javaCompileOptions { 
                annotationProcessorOptions { 
                    argumentos = [AROUTER_MODULE_NAME: project.getName ()] 
                } 
            } 
    }
    • ARouter no hay ruta buscada

    Un módulo camino diferente debe ser diferente, de lo contrario, dará lugar a un fallo en la trayectoria de un moudle

    Aquí está el código fuente para lanzar una excepción

        pública  del sincronizada  estática  vacío Finalización (Postal Postal) {
         SI ( nula == postal) {
             de banda  nueva nueva NoRouteFoundException (TAG + "Postal ¡No!" ); 
        } 
    
        // encontrar RouteMeta el objeto, si hay una descripción de la ruta exitosa, si el fallo no ha sido descrita la ruta de carga está mal o 
        RouteMeta routeMeta = Warehouse.routes.get (postcard.getPath ());
         SI ( nula == routeMeta) {
           // encontrar la clase de implementación IRouteGroup groupsIndex 
            clase <? la extiende IRouteGroup> groupMeta = Almacén .groupsIndex.get (postcard.getGroup ());
             IF(nula == groupMeta) {
                 de banda  nueva nueva NoRouteFoundException (TAG + "No hay un camino El partido ruta [" postcard.getPath + () + "], en el Grupo [" postcard.getGroup + () + "]" ); 
            } else {
                 // Get IRouteGroup clase de implementación por la reflexión, y luego se carga en la memoria 
                IRouteGroup iGroupInstance = groupMeta.getConstructor () la newInstance () ;. 
                iGroupInstance.loadInto (Warehouse.routes); 
                // cargado en la memoria Warehouse.groupsIndex suprimir este Grupo 
                Almacén .groupsIndex.remove (postcard.getGroup ()); 
            } 
        } else {
             // encontrar la dirección de enrutamiento
            .....
        } 
    }

     

    por: YZL

Supongo que te gusta

Origin www.cnblogs.com/widgetbox/p/yzl.html
Recomendado
Clasificación