O uso do ARouter do Alibaba no Android (salto de interface entre módulos e transferência de dados)

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'

 

 

 

 

 

 

 

 

Acho que você gosta

Origin blog.csdn.net/beautifulYuan/article/details/93192105
Recomendado
Clasificación