Android 모듈 여행: Aroutrer 프레임워크 사용 자습서

5464 단어
전언
회사의 프로젝트가 점점 커지고 인원이 많아지면서 프로젝트는 유지하기 어렵고 신입사원이 입사한 후에 프로젝트를 익히는 데 많은 시간을 들여야 한다.가장 중요한 것은 매번 번역 시간이 정말 너무 오래되었다!!!이 문제를 해결하기 위해서는 프로젝트 재구성, 모듈화가 일정을 잡아야 한다.프로젝트가 모듈로 분리된 후에 페이지의 이동은 startActivity에서 구체적인 activity를 직접 호출할 수 없다. 왜냐하면 이 Activity는 이미 다른 모듈에 있기 때문에 디스플레이 인용으로 힌트를 주지 못한다. 이럴 때 루트 라이브러리를 빌려 페이지의 이동을 실현해야 한다. 물론 반사하는 방식으로도 대응하는 페이지로 이동할 수 있다.이러한 루트를 통해 인용을 표시하는 것이 아니라 모듈 간의 결합을 해결하는 목적을 달성했다. 필요하지 않을 때 이 모듈의 컴파일을 도입하지 않아도 되고 개발 속도를 높일 수 있으며 발표할 때 편리하게 집적할 수 있고 기능이 영향을 받지 않기 때문에 모듈화의 첫걸음을 실현했다.라우팅 프레임워크는 알리가 오픈한 Arouter 라우팅 프레임워크를 사용하는 것을 추천한다. 아무래도 큰 공장에서 오픈한 프레임워크이기 때문에 안정성, 신뢰성도 상대적으로 높다.
Arouter 프레임워크 소개
Arouter 프레임워크 주소
  • 표준 URL을 직접 분석하여 점프를 지원하고 매개 변수를 목표 페이지에 자동으로 주입
  • 멀티 모듈 엔지니어링 지원
  • 다중 차단기 추가 지원, 사용자 정의 차단 순서
  • 의존 주입 지원, 단독 의존 주입 프레임워크로 사용 가능
  • InstantRun 지원
  • MultiDex 지원
  • 매핑 관계는 그룹별로 분류, 다중 관리, 필요에 따라 초기화
  • 전역 다운그레이드 및 로컬 다운그레이드 정책 지정
  • 지원
  • 페이지, 차단기, 서비스 등 구성 요소가 자동으로 프레임워크에 등록
  • 변환 애니메이션 구성에 대한 다양한 방법 지원
  • Fragment
  • 지원
  • Kotlin 및 믹싱 완전 지원
  • 타사 App 강화 지원(arouter-register로 자동 등록 가능)
  • 기본 사용
  • 종속 및 구성 추가
  • android {
        defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
            arguments = [ moduleName : project.getName() ]
            }
        }
        }
    }
    
    dependencies {
        //        ,       api
        //   compiler    ,            
        compile 'com.alibaba:arouter-api:x.x.x'
        annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
        ...
    }
    
  • 메모 추가
  • //              (  )
    //                   ,/xx/xx
    @Route(path = "/test/activity")
    public class YourActivity extend Activity {
        ...
    }
    

    루트 경로, 우리는 RouterManger 도구 클래스를 moudle_base 모듈에 봉하여 전체 프로젝트의 Path와 루트 프레임워크의 초기화 작업을 통일적으로 관리할 수 있다. 예는 다음과 같다.
    /**
     * @author: xiaohaibin.
     * @time: 2018/4/12
     * @mail:[email protected]
     * @github:https://github.com/xiaohaibin
     * @describe:          
     */
    public class RouterManger {
    
        public static class Path {
            public static final String MAIN_TEST_ACTIVITY = "/main/test2";
            public static final String USER_LOGIN_ACTIVITY = "/user/login";
            public static final String MAIN_NEED_LOGIN_ACTIVITY = "/main/need_login";
        }
    
        /**
         *        
         * @param application
         */
        public static void initRouter(Application application) {
            if (BuildConfig.DEBUG) {
                //     
                ARouter.openDebug();
                //       (   InstantRun     ,        !        ,       )
                ARouter.openLog();
            }
            ARouter.init(application);
        }
    }
    
    
  • SDK 초기화
  • public class MyApplication extends Application{
        @Override
        public void onCreate() {
            super.onCreate();
            //       
            RouterManger.initRouter(this);
        }
    }
    
  • 라우팅 시작
  • // 1.         
    ARouter.getInstance().build("/test/activity").navigation();
    
    // 2.        
      ARouter.getInstance()
                            .build(RouterManger.Path.MAIN_TEST_ACTIVITY)
                            .withString("key", "       ,       ")
                            .navigation(this);
    
  • 성명 차단기(점프 프로세스를 차단하고 절단면을 대상으로 프로그래밍) 이것은 Arouter 프레임워크에서 비교적 실용적인 기능이라고 생각합니다.일반적으로 우리는 로그인해야 하는 페이지를 돌릴 때, 매번 돌기 전에 로그인 검사를 반복한다.이제 로그인 차단기 하나만 설명하면 됩니다. 차단기는 점프 사이에서 실행되고, 여러 차단기는 우선순위에 따라 순서대로 실행됩니다.나이스하지 않나요!!!
  • /**
     * @author: xiaohaibin.
     * @time: 2018/4/12
     * @mail:[email protected]
     * @github:https://github.com/xiaohaibin
     * @describe:        
     */
    @Interceptor(priority = 8, name = "       ")
    public class LoginInterceptor implements IInterceptor {
    
        Context mContext;
    
        @Override
        public void process(final Postcard postcard, final InterceptorCallback callback) {
            if (Constants.NEED_LOGIN == postcard.getExtra()) {
               //           ,          caoz
                MainLooper.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(mContext, "   ", Toast.LENGTH_SHORT).show();
                        ARouter.getInstance().build(RouterManger.Path.USER_LOGIN_ACTIVITY).navigation();
                        //    ,     
                        callback.onInterrupt(null);
                    }
                });
            } else {
                //    ,     
                callback.onContinue(postcard);
            }
        }
    
        @Override
        public void init(Context context) {
            mContext = context;
            //           
        }
    }
    
  • 대상 페이지에 대한 추가 정보 선언
  • 우리는 항상 목표 페이지에 일부 속성을 설정해야 한다. 예를 들어'로그인이 필요한가'같은 것은 로트 주석의 extras 속성을 통해 확장할 수 있다. 이 속성은 int값이다. 다시 말하면 한 int에 4바이트, 즉 32바이트가 있고 32개의 스위치를 설정할 수 있으며 나머지는 스스로 발휘할 수 있다. 바이트 조작을 통해 32개의 스위치를 표시할 수 있다.스위치를 통해 목표 페이지의 일부 속성을 표시하면 차단기에서 이 표시를 받아서 업무 논리적 판단을 할 수 있다
    /**
     *         
     */
    @Route(path = RouterManger.Path.MAIN_NEED_LOGIN_ACTIVITY,extras = Constants.NEED_LOGIN)
    public class NeedLoginActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_need_login);
        }
    }
    

    Arouter의 더 자세한 사용 강좌는 공식 GitHub에서 확인할 수 있습니다. 상술한 개인 사용 과정에서 기록해야 할 것, 부족한 점을 양해해 주십시오.
    ArouterDemo 주소

    좋은 웹페이지 즐겨찾기