Android 모듈 여행: Aroutrer 프레임워크 사용 자습서
회사의 프로젝트가 점점 커지고 인원이 많아지면서 프로젝트는 유지하기 어렵고 신입사원이 입사한 후에 프로젝트를 익히는 데 많은 시간을 들여야 한다.가장 중요한 것은 매번 번역 시간이 정말 너무 오래되었다!!!이 문제를 해결하기 위해서는 프로젝트 재구성, 모듈화가 일정을 잡아야 한다.프로젝트가 모듈로 분리된 후에 페이지의 이동은 startActivity에서 구체적인 activity를 직접 호출할 수 없다. 왜냐하면 이 Activity는 이미 다른 모듈에 있기 때문에 디스플레이 인용으로 힌트를 주지 못한다. 이럴 때 루트 라이브러리를 빌려 페이지의 이동을 실현해야 한다. 물론 반사하는 방식으로도 대응하는 페이지로 이동할 수 있다.이러한 루트를 통해 인용을 표시하는 것이 아니라 모듈 간의 결합을 해결하는 목적을 달성했다. 필요하지 않을 때 이 모듈의 컴파일을 도입하지 않아도 되고 개발 속도를 높일 수 있으며 발표할 때 편리하게 집적할 수 있고 기능이 영향을 받지 않기 때문에 모듈화의 첫걸음을 실현했다.라우팅 프레임워크는 알리가 오픈한 Arouter 라우팅 프레임워크를 사용하는 것을 추천한다. 아무래도 큰 공장에서 오픈한 프레임워크이기 때문에 안정성, 신뢰성도 상대적으로 높다.
Arouter 프레임워크 소개
Arouter 프레임워크 주소
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);
}
}
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);
/**
* @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;
//
}
}
/**
*
*/
@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 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.