From b30ce8fdf011f5dac46da6c3cb7df36a79926364 Mon Sep 17 00:00:00 2001 From: Quyunshuo Date: Sat, 29 Aug 2020 14:57:03 +0800 Subject: [PATCH] =?UTF-8?q?Modify:=20=E4=BA=8B=E4=BB=B6=E6=80=BB=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lib_Base/build.gradle | 2 + .../base/mvvm/v/BaseFrameActivity.kt | 15 +++++- .../base/mvvm/v/BaseFrameFragment.kt | 11 ++++ .../quyunshuo/base/utils/EventBusRegister.kt | 11 ++++ .../com/quyunshuo/base/utils/EventBusUtils.kt | 54 +++++++++++++++++++ .../java/com/quyunshuo/base/utils/Utils.kt | 8 ++- Lib_Common/build.gradle | 1 + .../java/com/quyunshuo/main/MainActivity.kt | 12 +++++ README.md | 1 + .../androidbaseframemvvm/AppApplication.kt | 7 +++ .../DependencyManager.kt | 3 ++ moduleBase.gradle | 4 +- 12 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusRegister.kt create mode 100644 Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusUtils.kt diff --git a/Lib_Base/build.gradle b/Lib_Base/build.gradle index b6f247c..b7f4236 100644 --- a/Lib_Base/build.gradle +++ b/Lib_Base/build.gradle @@ -68,7 +68,9 @@ dependencies { api GitHub.ARoute api GitHub.RecyclerViewAdapter api GitHub.StatusBar + api GitHub.EventBus kapt GitHub.GlideCompiler kapt GitHub.ARouteCompiler + kapt GitHub.EventBusAPT } \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt index bdf7593..83d301e 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameActivity.kt @@ -6,6 +6,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.viewbinding.ViewBinding import com.alibaba.android.arouter.launcher.ARouter +import com.quyunshuo.base.utils.EventBusRegister +import com.quyunshuo.base.utils.EventBusUtils /** * @Author: QuYunShuo @@ -22,14 +24,23 @@ abstract class BaseFrameActivity(private val v protected val mBinding: VB by lazy(mode = LazyThreadSafetyMode.NONE) { initViewBinding() } + protected abstract fun initViewBinding(): VB + protected abstract fun initView() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(mBinding.root) // ARouter 依赖注入 ARouter.getInstance().inject(this) + // 注册EventBus + if (javaClass.isAnnotationPresent(EventBusRegister::class.java)) EventBusUtils.register(this) initView() } - protected abstract fun initViewBinding(): VB - protected abstract fun initView() + override fun onDestroy() { + if (javaClass.isAnnotationPresent(EventBusRegister::class.java)) EventBusUtils.unRegister( + this + ) + super.onDestroy() + } } \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt index 0ff9ebe..ebd77fd 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/mvvm/v/BaseFrameFragment.kt @@ -9,6 +9,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.viewbinding.ViewBinding import com.alibaba.android.arouter.launcher.ARouter +import com.quyunshuo.base.utils.EventBusRegister +import com.quyunshuo.base.utils.EventBusUtils /** * @Author: QuYunShuo @@ -41,6 +43,15 @@ abstract class BaseFrameFragment(private val v super.onViewCreated(view, savedInstanceState) // ARouter 依赖注入 ARouter.getInstance().inject(this) + // 注册EventBus + if (javaClass.isAnnotationPresent(EventBusRegister::class.java)) EventBusUtils.register(this) initView() } + + override fun onDestroy() { + if (javaClass.isAnnotationPresent(EventBusRegister::class.java)) EventBusUtils.unRegister( + this + ) + super.onDestroy() + } } \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusRegister.kt b/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusRegister.kt new file mode 100644 index 0000000..18fe300 --- /dev/null +++ b/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusRegister.kt @@ -0,0 +1,11 @@ +package com.quyunshuo.base.utils + +/** + * @Author: QuYunShuo + * @Time: 2020/8/29 + * @Class: BindEventBus + * @Remark: 辅助注册EventBus注解 + */ +@Target(AnnotationTarget.CLASS) +@kotlin.annotation.Retention(AnnotationRetention.RUNTIME) +annotation class EventBusRegister \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusUtils.kt b/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusUtils.kt new file mode 100644 index 0000000..7378693 --- /dev/null +++ b/Lib_Base/src/main/java/com/quyunshuo/base/utils/EventBusUtils.kt @@ -0,0 +1,54 @@ +package com.quyunshuo.base.utils + +import org.greenrobot.eventbus.EventBus + +/** + * @Author: QuYunShuo + * @Time: 2020/8/29 + * @Class: EventBusUtil + * @Remark: EventBus工具类 + */ +object EventBusUtils { + + /** + * 订阅 + * @param subscriber 订阅者 + */ + fun register(subscriber: Any) = EventBus.getDefault().register(subscriber) + + /** + * 解除注册 + * @param subscriber 订阅者 + */ + fun unRegister(subscriber: Any) = EventBus.getDefault().unregister(subscriber) + + /** + * 发送普通事件 + * @param event 事件 + */ + fun postEvent(event: Any) = EventBus.getDefault().post(event) + + /** + * 发送粘性事件 + * @param stickyEvent 粘性事件 + */ + fun postStickyEvent(stickyEvent: Any) = EventBus.getDefault().postSticky(stickyEvent) + + /** + * 手动获取粘性事件 + * @param stickyEventType 粘性事件 + * @param 事件泛型 + * @return 返回给定事件类型的最近粘性事件 + */ + fun getStickyEvent(stickyEventType: Class): T = + EventBus.getDefault().getStickyEvent(stickyEventType) + + /** + * 手动删除粘性事件 + * @param stickyEventType 粘性事件 + * @param 事件泛型 + * @return 返回给定事件类型的最近粘性事件 + */ + fun removeStickyEvent(stickyEventType: Class): T = + EventBus.getDefault().removeStickyEvent(stickyEventType) +} \ No newline at end of file diff --git a/Lib_Base/src/main/java/com/quyunshuo/base/utils/Utils.kt b/Lib_Base/src/main/java/com/quyunshuo/base/utils/Utils.kt index 02471d2..7172d53 100644 --- a/Lib_Base/src/main/java/com/quyunshuo/base/utils/Utils.kt +++ b/Lib_Base/src/main/java/com/quyunshuo/base/utils/Utils.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.flowOn /** * 以顶层函数存在的常用工具方法 * startPolling() -> 开启一个轮询 + * sendEvent() -> 发送普通EventBus事件 */ /** @@ -32,4 +33,9 @@ suspend fun startPolling(intervals: Long, block: () -> Unit) { .catch { Log.e("flow", "startPolling: $it") } .flowOn(Dispatchers.Main) .collect { block.invoke() } -} \ No newline at end of file +} + +/** + * 发送普通EventBus事件 + */ +fun sendEvent(event: Any) = EventBusUtils.postEvent(event) \ No newline at end of file diff --git a/Lib_Common/build.gradle b/Lib_Common/build.gradle index df7545c..9f91c8b 100644 --- a/Lib_Common/build.gradle +++ b/Lib_Common/build.gradle @@ -43,4 +43,5 @@ dependencies { kapt GitHub.GlideCompiler kapt GitHub.ARouteCompiler + kapt GitHub.EventBusAPT } \ No newline at end of file diff --git a/Lib_Main/src/main/java/com/quyunshuo/main/MainActivity.kt b/Lib_Main/src/main/java/com/quyunshuo/main/MainActivity.kt index fd4d634..3dcbb86 100644 --- a/Lib_Main/src/main/java/com/quyunshuo/main/MainActivity.kt +++ b/Lib_Main/src/main/java/com/quyunshuo/main/MainActivity.kt @@ -3,10 +3,15 @@ package com.quyunshuo.main import android.widget.Toast import com.alibaba.android.arouter.facade.annotation.Route import com.alibaba.android.arouter.launcher.ARouter +import com.quyunshuo.base.ktx.toast +import com.quyunshuo.base.utils.EventBusRegister +import com.quyunshuo.base.utils.sendEvent +import com.quyunshuo.common.bean.TestBean import com.quyunshuo.common.constant.RouteKey import com.quyunshuo.common.constant.RouteUrl import com.quyunshuo.common.ui.BaseActivity import com.quyunshuo.main.databinding.MainActivityMainBinding +import org.greenrobot.eventbus.Subscribe /** * @Author: QuYunShuo @@ -14,6 +19,7 @@ import com.quyunshuo.main.databinding.MainActivityMainBinding * @Class: MainActivity * @Remark: 主界面Activity */ +@EventBusRegister @Route(path = RouteUrl.MainActivity) class MainActivity : BaseActivity(MainViewModel::class.java) { @@ -31,5 +37,11 @@ class MainActivity : ARouter.getInstance().build(RouteUrl.MainActivity2) .withString(RouteKey.KEY_NAME, "ARouter").navigation() } + sendEvent(TestBean("EventBus")) + } + + @Subscribe + fun onEvent(event: TestBean) { + toast(event.msgTest) } } \ No newline at end of file diff --git a/README.md b/README.md index ec666eb..a089bc6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Android项目框架(组件化 + Kotlin + MVVM + Jetpack ) note: 1. 测试打包脚本 + 2. 对比开源项目flow的封装 资源文件相关{ 资源相关文件属于项目相关的,因此需要放在Common组件内,不要放在Base组件里 diff --git a/app/src/main/java/com/quyunshuo/androidbaseframemvvm/AppApplication.kt b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/AppApplication.kt index 65d4a11..2a131b8 100644 --- a/app/src/main/java/com/quyunshuo/androidbaseframemvvm/AppApplication.kt +++ b/app/src/main/java/com/quyunshuo/androidbaseframemvvm/AppApplication.kt @@ -1,7 +1,9 @@ package com.quyunshuo.androidbaseframemvvm import androidx.multidex.MultiDex +import com.quyunshuo.androidbaseframemvvm.eventbus.index.MainEventIndex import com.quyunshuo.common.CommonApplication +import org.greenrobot.eventbus.EventBus /** * @Author: QuYunShuo @@ -13,6 +15,11 @@ class AppApplication : CommonApplication() { override fun initialize() { MultiDex.install(this) + // 开启EventBusAPT,优化反射效率 + EventBus + .builder() + .addIndex(MainEventIndex()) + .installDefaultEventBus() super.initialize() } } \ No newline at end of file diff --git a/buildSrc/src/main/java/com.quyunshuo.androidbaseframemvvm.build/DependencyManager.kt b/buildSrc/src/main/java/com.quyunshuo.androidbaseframemvvm.build/DependencyManager.kt index 7fa4773..63a9146 100644 --- a/buildSrc/src/main/java/com.quyunshuo.androidbaseframemvvm.build/DependencyManager.kt +++ b/buildSrc/src/main/java/com.quyunshuo.androidbaseframemvvm.build/DependencyManager.kt @@ -39,6 +39,7 @@ object Version { const val ARouteCompiler = "1.2.2" // 阿里路由 APT const val RecyclerViewAdapter = "3.0.4" // RecyclerViewAdapter const val StatusBar = "1.5.1" // 状态栏 + const val EventBus = "3.2.0" } object AndroidX { @@ -91,4 +92,6 @@ object GitHub { const val RecyclerViewAdapter = "com.github.CymChad:BaseRecyclerViewAdapterHelper:${Version.RecyclerViewAdapter}" const val StatusBar = "com.jaeger.statusbarutil:library:${Version.StatusBar}" + const val EventBus = "org.greenrobot:eventbus:${Version.EventBus}" + const val EventBusAPT = "org.greenrobot:eventbus-annotation-processor:${Version.EventBus}" } \ No newline at end of file diff --git a/moduleBase.gradle b/moduleBase.gradle index 80037f3..0ababc3 100644 --- a/moduleBase.gradle +++ b/moduleBase.gradle @@ -63,7 +63,8 @@ android { kapt { arguments { - arg("AROUTER_MODULE_NAME", project.getName()) + arg("AROUTER_MODULE_NAME", project.name) + arg("eventBusIndex", "${BuildConfig.applicationId}.eventbus.index.${project.name.replace('Lib_', '')}EventIndex") } } @@ -77,4 +78,5 @@ dependencies { androidTestImplementation AndroidX.TestEspresso kapt GitHub.GlideCompiler kapt GitHub.ARouteCompiler + kapt GitHub.EventBusAPT } \ No newline at end of file