1. Ao desenvolver um projeto relativamente grande, você deve considerar a modularização e dividir todo o projeto em n módulos. Desta forma, cada módulo é responsável por um sistema de negócio, o que facilita o desenvolvimento iterativo posterior e torna o departamento de projetos menos inchado. Compilado separadamente, cada módulo pode ser executado de forma independente. Finalmente, cada módulo é adicionado a um APP host e mesclado em um projeto completo.
Depois de dividir em módulos, saltar entre interfaces é um grande problema. Use a biblioteca de código aberto ARouter do Alibaba para resolver esse problema.
Em projetos tradicionais, nosso negócio está todo em um único módulo. Intenter é usado para saltar entre interfaces. Isso torna o código altamente acoplado. startActivity(new intenter(testActivity.this,test2Activity.class)); Há também um método de salto implícito
Intent intent = new Intent();
intent.setAction(“com.android.activity.MY_ACTION”);
startActivity(intenção); thisAction 也要在Mainfest.xml注册。也有弊端扩展性很差。
再分模块的项目和一个模块下 界面与界面的跳转 我们都可以用ARouter框架.
2.接下来就在自己的项目中用起来,我这里写一个Demo
Endereço gitHub de roteamento de código aberto do Alibaba: https://github.com/alibaba/ARouter
Abra seu endereço e adicione dependências relevantes de acordo com sua configuração. Principalmente esses dois locais: se o projeto for sincronizado novamente e nenhum erro for relatado, significa que a introdução foi bem-sucedida.
android { defaultConfig { javaCompileOptions { annotationProcessorOptions { argumentos = [AROUTER_MODULE_NAME: project.getName()] } } } }
dependências { implementação 'com.alibaba:arouter-api:1.5.0' //A versão aqui é baseada na versão mais recente no github annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' //A versão aqui é baseada no github A versão mais recente prevalecerá }
3. Construa um aplicativo global para inicializar configurações relacionadas
classe pública MyApplication estende Aplicativo { boolean isDebug=true; @Override public void onCreate() { super.onCreate(); if (isDebug){ //这2个必须要在初始化之前开启。Essas duas linhas devem ser escritas antes do init, caso contrário essas configurações serão //inválidas no processo init ARouter.openLog(); ARouter.openDebug(); // Ativa o modo de depuração (se você estiver executando no modo InstantRun, você deve ativar o modo de depuração! A versão online // precisa ser fechada, caso contrário há um risco de segurança) } ARouter.init(this ) ; //初始化SDK O mais cedo possível, é recomendado inicializar no } }
4. Crie 2 novas atividades de teste
classe pública MainActivity estende AppCompatActivity { Button but_onClick; @Override protegido void onCreate(Bundle saveInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvent(); } private void initView() { but_onClick=(Button) findViewById(R.id.but_onClick); } private void initEvent() { // 点击界面跳转 but_onClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(Ver visualização) { //1.简单的跳转 // ARouter.getInstance().build("/test/testActivity").navigation(); //O caminho aqui é o endereço de anotação para saltar para a interface //2. Geralmente, o salto da interface deve carregar o parâmetro ARouter .getInstance().build("/test/testActivity") .withString("userName","Zhang San") .withInt("idade",123) .navigation(); } }); } }
5.Esta é a interface para a qual pular
// Adicione anotações nas páginas que suportam roteamento (obrigatório) // O caminho aqui precisa prestar atenção para precisar de pelo menos dois níveis: /xx/xx 至少2级 @Route(path = "/test/testActivity") public class TestActivity estende AppCompatActivity { @Autowired public String userName; @Autowired public int idade; @Override protegido void onCreate(@Nullable Bundle salvoInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); ARouter.getInstance().inject(this); //注入 Log.d("TAG",userName+age); } }
6. O exemplo acima é o salto da interface sob um módulo. Na verdade, é muito simples. Há também o salto do Fragment. As rotinas são as mesmas. Basta olhar para a API que ele fornece.
7. Crie um novo módulo, mas este módulo não é um aplicativo, mas sim uma biblioteca, essa é a diferença entre os dois.
aplicar plugin: 'com.android.application' aplicar plugin: 'com.android.library'
8. Aqui está uma imagem aproximada:
9. Gráfico de estrutura do meu projeto:
10. Adicione 3 dependências de módulo no build.gradle do aplicativo: baselib, secondtest, testmoudle. Conforme mostrado na figura:
11. Aqui eu pulo da interface MainActivity do aplicativo host para a interface ThreeActivity do baselib:
classe pública MainActivity estende AppCompatActivity { Button but_onClick; @Override protegido void onCreate(Bundle saveInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvent(); } private void initView() { but_onClick=(Button) findViewById(R.id.but_onClick); } private void initEvent() { // 点击界面跳转 but_onClick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(Ver visualização) { //1.简单的跳转 // ARouter.getInstance().build("/test/testActivity").navigation(); //O caminho aqui é o endereço de anotação para saltar para a interface //2. Geralmente, o salto da interface deve carregar o parâmetro ARouter .getInstance().build("/test/demoActivity") .withString("userName","Zhang San") .withInt("idade",123) .navigation(); } }); } }
@Route(path = "/test/demoActivity") classe pública ThreeActivity estende AppCompatActivity { Button but_test; @Autowired public String nome_do_usuário; @Autowired public int idade; @Override protegido void onCreate(@Nullable Bundle salvoInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_três); ARouter.getInstance().inject(this); Log.d("TAG",nomedeusuario+idade); } }
12. Saltos de interface e transferência de dados entre módulos: saltos de interface e transferência de dados são feitos nos dois módulos baselib e testmoudle.
@Route(path = "/test/demoActivity") classe pública ThreeActivity estende AppCompatActivity { Button but_test; @Autowired public String nome_do_usuário; @Autowired public int idade; @Override protegido void onCreate(@Nullable Bundle salvoInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_três); ARouter.getInstance().inject(this); Log.d("TAG",nomedeusuario+idade); initView(); } private void initView() { but_test=(Botão) findViewById(R.id.but_test); but_test.setOnClickListener(new View.OnClickListener() { @Sobrepor public void onClick(Ver visualização) { ARouter.getInstance().build("/testmoudle1/MainActivity") .withString("userName","张三") .withInt("age",123) .navigation() ; } }); } }
@Route(path = "/testmoudle1/MainActivity") public class FiveActivity estende AppCompatActivity { @Autowired public String userName; @Autowired public int idade; @Override protegido void onCreate(@Nullable Bundle salvoInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_five); ARouter.getInstance().inject(this); Log.d("TAG","testmoudle"+userName+idade); } }
Resumir:
Introduzi os arquivos de configuração relevantes no arquivo público baselib build.gradle. E você precisa introduzir arquivos de configuração em outros módulos. Se não for introduzido, um erro será relatado. Não está claro. Apenas essas 3 coisas. Somente saltos de interface e transferência de dados são feitos aqui. Outras operações serão atualizadas na próxima vez.
javaCompileOptions { annotationProcessorOptions { argumentos = [AROUTER_MODULE_NAME: project.getName()] } }
implementação 'com.alibaba:arouter-api:1.5.0' anotaçãoProcessor 'com.alibaba:arouter-compiler:1.2.2'