Name | CC | cc-register |
---|---|---|
Version |
Демо показывает, как CC работает с компонентом в основном приложении или нет. Это выглядит следующим образом при запуске обоих приложений на вашем устройстве и запуске демонстрационного приложения.
Примечание: вызов между приложениями совместим только для разработки. Вам нужно включить разрешение «автозапуск» для Demo_B, чтобы оно работало, если процесс Demo_B не активен.
— Простота использования, всего 4 шага: 1. Добавьте плагин AutoRegister в classpath в projectRoot/build.gradle. 2. Добавьте файл gradle apply в module/build.gradle. 3. Реализуйте класс компонента для IComponent в модуле. * Укажите имя для этого компонента в методе getNae(). * Вызовите CC.sendCCResult(cc.getCallId, CCResule.success()) в методе onCall(cc). 4. Затем вы можете вызвать этот компонент в любом месте вашего приложения: * CC.obtainBuilder("component_name").build().call(). * CC.obtainBuilder("component_name").build().callAsync().
— Богатые возможности: * Поддержка межкомпонентного вызова (не только маршрутизация активности, вызов и обратный вызов для почти всех инструкций). * Поддержка вызова компонентов, связанных с жизненным циклом Activity и Fragment (требуется: уровень API Android >= 14, версия библиотеки поддержки >= 5.1.0). * Поддержка межприкладного вызова компонентов (разработка и внедрение компонентов могут выполняться отдельно как приложение). * Поддержка переключения и настройки разрешений вызова между приложениями (соответствует требованиям безопасности разных уровней, статус по умолчанию: включён и не требует разрешения). * Синхронный и асинхронный вызов. * Синхронная и асинхронная реализация компонентов. * Метод вызова не ограничен реализацией (например, асинхронная реализация другого компонента может быть вызвана синхронно. Примечание: не используйте длительные операции в основном потоке). * Поддержка добавления пользовательских перехватчиков (выполняются в порядке добавления). * Настройка тайм-аута (в миллисекундах, 0: без тайм-аута, синхронный вызов установлен по умолчанию на 1000 мс). * Ручная отмена. * Автоматическая регистрация компонентов (IComponent) во время компиляции без ручного ведения реестра компонентов (реализовано с использованием ASM для изменения байт-кода). * Динамическая регистрация и отмена регистрации компонентов (IDynamicComponent). * Поддержка объектов не основных типов, таких как передача фрагментов между компонентами. * Попытка решить проблему сбоя, вызванного неправильным использованием: * Сбой вызова компонента, обратного вызова и реализации компонента перехватывается внутри фреймворка CC. * Объект CCResult синхронного возврата или асинхронного обратного вызова не должен быть нулевым, чтобы избежать нулевого указателя.
— Низкая стоимость преобразования исходного кода в CC. Некоторые люди беспокоятся о том, что преобразование кода в старом проекте в высокой степени связывания кода слишком дорого. CC может решить эту проблему всего за 2 шага:
// устанавливаем контекст для CC CC.obtainBuilder("demo.ComponentA")...setContext(context)...build().callAsync()
// CC автоматически отменится при уничтожении активности CC.obtainBuilder("demo.ComponentA")...cancelOnDestroyWith(activity)...build().callAsync()
// CC автоматически отменится при разрушении фрагмента CC.obtainBuilder("demo.ComponentA")...cancelOnDestroyWith(fragment)...build().callAsync()
// задаём имя действия CC CC.obtainBuilder("demo.ComponentA")...setActionName(actionName)...build().callAsync()
// задаём таймаут CC в миллисекундах CC.obtainBuilder("demo.ComponentA")...setTimeout(1000)...build().callAsync()
// добавляем внешние параметры CC.obtainBuilder("demo.ComponentA")...addParam("name", "billy").addParam("id", 12345)...build().callAsync()
// создаём успешный CCResult CCResult.success(key1, value1).addData(key2, value2)
// создаём неудачный CCResult CCResult.error(message).addData(key, value)
// отправляем CCResult вызывающему (необходимо убедиться, что этот метод вызывается для каждого onCall(cc)) CC.sendCCResult(cc.getCallId(), ccResult)
// получаем результат CC: успех или нет ccResult.isSuccess()
// код успеха (0: успех, <0: неудача, 1: компонент достигнут, но результат неудачен) ccResult.getCode()
// получаем сообщение об ошибке ccResult.getErrorMessage()
// получаем внешние данные Map<String, Object> data = ccResult.getDataMap(); if (data != null) { Object value = data.get(key) }
Список кодов CCResult:
код | статус ошибки |
---|---|
0 | успех |
1 | бизнес-процесс не удался в компоненте |
-1 | ошибка по умолчанию. пока не используется |
-2 | имя компонента пусто |
-3 | CC.sendCCResult (callId, null) или перехватчик возвращает null |
-4 | во время CC возникло исключение |
-5 | для указанного component_name не найден объект компонента |
-6 | контекст равен нулю и получение приложения не удалось из-за отражения |
-7 | сбой подключения во время CC между приложениями |
-8 | CC отменён |
-9 | CC превысил таймаут |
-10 | component.onCall (cc) вернул false, автобус не нашёл CCResult |
Пользовательские перехватчики:
Смотрите демонстрацию: MissYouInterceptor.java.
Регистрация/отмена регистрации динамического компонента:
Определение: В отличие от статического компонента (IComponent), который автоматически регистрируется в ComponentManager во время компиляции, динамические компоненты не регистрируются автоматически и работают через ручную регистрацию/отмену регистрации.
В модуле может быть несколько компонентов:
В модуле можно иметь несколько классов реализации интерфейса IComponent (или интерфейса IDynamicComponent). Компоненты IComponent автоматически регистрируются в классе управления компонентами ComponentManager во время компиляции. IDynamicComponents — нет.
Компонент может обрабатывать несколько действий:
В методе onCall (CC cc) получает действия для обработки отдельно через cc.getActionName().
См.: ComponentA.
Автоматическая регистрация пользовательского ActionProcessor в компонент:
См.: ComponentB и cc-settings-demo.gradle.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )