1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wrbug-componentrouter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Компонентный маршрутизатор

Эффективное решение для коммуникации между компонентами, не требующее рефлексии и предполагающее простую настройку для обеспечения связи при полной развязке компонентов.

Использование

Добавление зависимости

Последняя версия: 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;
    }
}

Использование 1 (получение экземпляра Fragment)

Регистрация сервиса (AFragment для внешнего использования)
//Регистрация сервиса
@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");

Использование 2 (вызов синглтона между компонентами)

Регистрация сервиса (UserManagerService, предоставление sp-сервиса для внешнего использования)
@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");

Использование 3 (совместное использование с третьей стороной)

Если вы уже получили экземпляр 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Эффективное решение для коммуникации между компонентами, 0 рефлексии, требуется только простая настройка, что позволяет удобно осуществлять коммуникацию между компонентами. Расширить Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/wrbug-componentrouter.git
git@gitlife.ru:oschina-mirror/wrbug-componentrouter.git
oschina-mirror
wrbug-componentrouter
wrbug-componentrouter
master