Компонентный маршрутизатор
Эффективное решение для коммуникации между компонентами, не требующее рефлексии и предполагающее простую настройку для обеспечения связи при полной развязке компонентов.
Использование
Последняя версия: 1.0.2
В корневом каталоге проекта build.gradle
добавьте:
dependencies {
classpath "com.wrbug.componentrouter:gradle:$version"
}
В каждом модуле build.gradle
:
//Только в главном проекте
apply plugin: 'com.wrbug.componentroutergradle'
//============
implementation "com.wrbug.componentrouter:componentrouter:$version"
annotationProcessor "com.wrbug.componentrouter:compile:$version"
Инициализация приложения:
@ObjectRoute(ObjectRoute.APPLICATION_PATH)
public class App extends Application {
private static App instance;
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
@SingletonRouter
//Получение экземпляра приложения, можно настроить в соответствии с проектом
public static App getInstance() {
return instance;
}
}
//Регистрация сервиса
@ObjectRoute("/a/AFragment")
public class AFragment extends Fragment {
private EditText et;
//Конструктор для внешней инициализации
@ConstructorRouter
public AFragment() {
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
et = view.findViewById(R.id.et);
}
//Метод для доступа извне
@MethodRouter("getText")
String getText() {
return et.getText().toString();
}
}
ComponentRouterInstance build=ComponentRouter.build("/a/AFragment");
//Получение экземпляра
Fragment fragment = build.getInstance();
if (fragment != null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, fragment).commitAllowingStateLoss();
}
//Вызов сервиса
String text = build.getProxy().call("getText");
@ObjectRoute("/a/userManager")
public class UserManagerService {
private static volatile UserManagerService instance;
private Context mContext;
private SharedPreferences mUserSharedPreferences;
private UserManagerService(Context context) {
mContext = context.getApplicationContext();
mUserSharedPreferences = mContext.getSharedPreferences("user", Context.MODE_PRIVATE);
}
@SingletonRouter
public static UserManagerService getInstance(Context context) {
if (instance == null) {
synchronized (UserManagerService.class) {
if (instance == null) {
instance = new UserManagerService(context);
}
}
}
return instance;
}
@MethodRouter("saveUsername")
public void saveUsername(String username) {
mUserSharedPreferences.edit().putString("username", username).apply();
}
@MethodRouter("getUsername")
public String getUsername() {
return mUserSharedPreferences.getString("username", "");
}
}
//UserManagerService имеет аннотацию @SingletonRouter, поэтому build является синглтоном
ComponentRouterInstance build = ComponentRouter.build("/a/userManager", this.getApplicationContext());
//Сохранение имени пользователя
build.getProxy().call("saveUsername", "WrBug");
//Получение имени пользователя
String username = build.getProxy().call("getUsername");
Если вы уже получили экземпляр Fragment через сторонний фреймворк, вы можете использовать сервис следующим образом:
//Использование полученного Fragment
Fragment fragment = (Fragment) ARouter.getInstance().build("/test/fragment").navigation();
//Класс фрагмента должен иметь аннотацию @ObjectRoute, иначе прокси не будет работать
ComponentRouterProxy proxy = ComponentRouter.createProxy(fragment);
String text=proxy.call("getText"); [@SingletonRouter](component_router/src/main/java/com/wrbug/componentrouter/annotation/SingletonRouter.java)
Это аннотация-одиночка, которая используется для получения статического метода класса-сервиса. Применяется так же, как и `@ConstructorRouter`. Если в классе сервиса используются аннотации `@SingletonRouter` или `@ConstructorRouter`, то они автоматически становятся недействительными. Пример использования: [UserManagerService](a_component/src/main/java/com/wrbug/componentrouter/acomponent/UserManagerService.java).
[@MethodRouter](component_router/src/main/java/com/wrbug/componentrouter/annotation/MethodRouter.java)
Эта аннотация используется для методов класса сервиса, которые предоставляются внешним пользователям. Пример использования: [UserManagerService](a_component/src/main/java/com/wrbug/componentrouter/acomponent/UserManagerService.java).
### ComponentRouter принцип
Информация отсутствует.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )