Introducción y uso de ARouter en el segundo día

Instrucciones oficiales

Sitio web oficial
https://github.com/alibaba/ARouter/blob/master/README_CN.md
Marco de enrutamiento de desarrollo propio de Alibaba, que resuelve principalmente el problema de los saltos de interfaz entre componentes y módulos

aplicación tipica

  1. Mapeo de la URL externa a la página interna, así como el paso y el análisis de parámetros
  2. Salto de página entre módulos, desacoplamiento entre módulos
  3. Intercepta el proceso de salto, maneja la lógica de iniciar sesión, enterrar puntos, etc.
  4. Llamadas a API entre módulos, desacoplamiento de componentes mediante inversión de control

Función básica

1, agregar dependencias y configuración

android {
    defaultConfig {
        ...
        //每一个用的build.都要加
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}

Configuración

dependencies {
    
    
 
    implementation 'com.alibaba:arouter-api:1.5.1'
	annotationProcessor 'com.alibaba:arouter-compiler:1.5.1'
    ...
}

Nota: Errores que ocurren cuando las configuraciones no están configuradas

错误: ARouter::Compiler An exception is encountered, [These no module name, at 'build.gradle', like :

2 Inicialice el SDK

public class App extends Application {
    
    

    @Override
    public void onCreate() {
    
    
        super.onCreate();
        ARouter.openLog();     // 打印日志
        ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        ARouter.init(this); // 尽可能早,推荐在Application中初始化
    }
}

Establezca el atributo de nombre en el archivo de manifiesto .

2, agregue una ruta de configuración de comentarios (sin parámetros)

Agregar anotaciones (Agregar anotaciones)
página de destino para agregar @Route
ruta de anotación : ruta de la página de la plantilla, debe comenzar con una barra en más de dos niveles del
grupo de ruta : grupo de páginas, el nombre predeterminado es el nombre del módulo como nombre

// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/Xxx_module/XxxActivity")
public class XxxActivity extend Activity {
    ...
}

/**
 * 配置路径
 */
@Route( path = "/shop/main2")
public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }
}

Página de salto (iniciar el enrutamiento)

//Activity跳转
ARouter.getInstance().build("/Xxx_module/XxxActivity").navigation();
//Fragment引入
Fragment fragment = (Fragment) ARouter.getInstance().build("/Xxx_module/XxxFragment").navigation();

3. Parámetros de salto y transporte

Iniciar el enrutamiento Saltar con parámetros Los
parámetros han sido llevados por el método withXXX () para transportar los parámetros de tipo de datos correspondientes
Instrucciones especiales: withObject () no se puede usar directamente: vea cómo usarlo, vea a continuación.

ARouter.getInstance().build("/test/1")
            .withString("key3", "888")
            .navigation();

3.1 Llevar parámetros con Objeto (Iniciar el salto de enrutamiento con parámetros)
Cuando la página salta para pasar los parámetros del objeto personalizado, necesitamos crear el servicio de número de serie.
Genial-. -Cómo crear un servicio de serialización público, solo necesita crearlo una vez, como clase de herramienta.
1. Implementar la interfaz ARouter SerializationService
2. Para completar la implementación del método correspondiente, podemos usar JSON o GSON para implementar el método y convertir objetos y cadenas

@Route(path = "/service/gson")
public class GosnServiceImp implements SerializationService {
    
    
    private Gson gson;
    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
    
    
        return gson.fromJson(input, clazz);
    }
    @Override
    public String object2Json(Object instance) {
    
    
        return gson.toJson(instance);
    }
    @Override
    public <T> T parseObject(String input, Type clazz) {
    
    
        return gson.fromJson(input, clazz);
    }
    @Override
    public void init(Context context) {
    
    
        gson = new Gson();
    }
}

4. Recepción de parámetros


@Route(path = "/app/main3")
public class Main3Activity extends AppCompatActivity {
    
    
    @Autowired
    String key3;    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
        //注入
        ARouter.getInstance().inject(this);
        Toast.makeText(this, key3, Toast.LENGTH_SHORT).show();
    }
}

5 Saltar entre componentes

ARouter.getInstance (). Build ("/ news / main"). Navigation (); El
método de enlace es el mismo.
Solo el módulo que se va a saltar debe ser agregado a la biblioteca del proyecto actual.
Si usa la administración de calces, puede saltar directamente.
De lo contrario, agregue la biblioteca manualmente.

Tenga en cuenta que
si usa calces para administrar, los archivos de manifiesto se fusionarán, por lo que habrá conflictos con el mismo nombre de clase.

6 Entrega de objetos

ARouter.getInstance().build("/app/main3")
                .withString("key3", "888")
                .withObject("test",new Test("hehe","haha")) //对象
                .navigation();

6.1 es principalmente para implementar una interfaz


@Route(path = "/transerver/gson")
public class JSonBean implements SerializationService {
    
    
    private Gson gson;

    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
    
    
        return gson.fromJson(input,clazz);
    }

    @Override
    public String object2Json(Object instance) {
    
    
        return gson.toJson(instance);
    }

    @Override
    public <T> T parseObject(String input, Type clazz) {
    
    
        return gson.fromJson(input,clazz);
    }

    @Override
    public void init(Context context) {
    
    
        gson = new Gson();
    }
}

La ruta de esta interfaz es arbitraria. Su propósito principal es convertir cadenas y objetos directamente entre sí.
Nos proporciona un marco para implementar la lógica. Por ejemplo, podemos usar Gson o FastJson.

7, use el enrutamiento para agregar fragmentos dinámicamente

Crear fragmento

@Route(path = "/fragment/blank")
public class BlankFragment extends Fragment {
    
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
    
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }
}

Usar búsqueda de ruta

 public void btn3(View view) {
    
    

        Fragment fragment = (Fragment) ARouter.getInstance().build("/fragment/blank").navigation();

       getSupportFragmentManager().beginTransaction().add(R.id.ll,fragment).commit();

8 Implementación del interceptor

// 比较经典的应用就是在跳转过程中处理登陆事件,这样就不需要在目标页重复做登陆检查
// 拦截器会在跳转之间执行,多个拦截器会按优先级顺序依次执行
@Interceptor(priority = 8, name = "测试用拦截器")
public class TestInterceptor implements IInterceptor {
    
    
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
    
    
    ...
    callback.onContinue(postcard);  // 处理完成,交还控制权
    // callback.onInterrupt(new RuntimeException("我觉得有点异常"));      // 觉得有问题,中断路由流程

    // 以上两种至少需要调用其中一种,否则不会继续路由
    }

    @Override
    public void init(Context context) {
    
    
    // 拦截器的初始化,会在sdk初始化的时候调用该方法,仅会调用一次
    }
}

solicitud:

ARouter.getInstance().build("/news/main").navigation(this, new NavigationCallback() {
    
    
            @Override
            public void onFound(Postcard postcard) {
    
    

            }

            @Override
            public void onLost(Postcard postcard) {
    
    

            }

            @Override
            public void onArrival(Postcard postcard) {
    
    

            }

            //子线程
            @Override
            public void onInterrupt(Postcard postcard) {
    
    
                runOnUiThread(new Runnable() {
    
    
                    @Override
                    public void run() {
    
    
                        Toast.makeText(MainActivity.this, "拦截了", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        });

Combinar ARouter y Calces

artículos de atención especial:

Si continúa utilizando calces para hacer el proyecto, es posible que no se encuentre el archivo Main2Activity
, que debe modificarse en dos lugares, uno es.

app {
    
    
            applicationName '.App'
            modules ':news',':shop'
        }

Agregue una aplicación al inicio. Se usa para inicializar ARouter. La
otra es: si el archivo de manifiesto no tiene Main2Activity, debe agregarse al archivo de manifiesto en la carpeta src en el directorio del proyecto. En lugar de agregarlo a el archivo en calces.

Convierta un proyecto en un módulo

1) Ponga build.gradle en la aplicación

aplicar complemento: 'com.android.application' se
reemplaza con lo siguiente

aplicar complemento: 'com.android.library'
2) Mira el applicationId en el archivo build.gradle

3) Comente MainActivity en el archivo AndroidManifest de la aplicación, porque una aplicación no puede tener 2 entradas de programa; de lo contrario, habrá 2 iconos en el escritorio.

4) Importe este módulo en otros proyectos importando módulo

La aplicación en sí también debe cambiarse del módulo

apply plugin: 'calces.modules'
appConfig {
    
    

    //调试开关,控制所有app能不能独立运行
    debugEnable true

    apps {
    
    

        //把app也改成moudle .然后id和name都不能少.
        //可以少name 报错看看
        app {
    
    
            applicationId "com.fenghongzhang.feng2"
            applicationName ".App"
            modules ':shop'
        }
    }

    //所有组件
    modules {
    
    
        //注意事项:
        //如果设定了applicationId 则要原来的applicationId删除相关 否则报错
		//isRunAlone 必须是false 才能跳转.因为false就是moudle了
        shop {
    
    
            name ':shop'
            applicationId "com.fenghongzhang.shop"
            mainActivity ".MainActivity"
            isRunAlone true
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/shuai_ge_feng/article/details/108586984
Recomendado
Clasificación