代码之家  ›  专栏  ›  技术社区  ›  Aba

使用EventBus从基本活动完成活动?

  •  1
  • Aba  · 技术社区  · 7 年前

    在一个现有的项目上工作时,我发现这个实现相当罕见(至少对我来说)。由于我没有与之前已经离开的开发人员联系,在我将其视为简单地从我们的代码库的另一部分复制和粘贴代码之前,我想向SO社区询问这一点。

    以下是扩展BaseActivity的日常活动及其实现:

    class SomeActivity : BaseActivity(R.layout.some_activity) {
        ...
        private fun close() {
            if(backToMain)
                finish()
            } 
            else
                goToMain(this)
        }
    
        companion object {
            fun goToMain(activity: AppCompatActivity) {
                val intent = Intent(activity, MainActivity::class.java)
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
                activity.startActivity(intent)
                EventBus.getDefault().post(Event(Event.Type.ActivityFinish))
            }
        }
        ...
    }
    

    @Subscribe override fun onEvent(event: Event) {
        when (event.type) {
            Event.Type.ActivityFinish -> super.finish()
            else -> {}
        }
    }
    

    现在 Activity.finish() 即使某些活动实际上是一个片段 getActivity.finish()

    Activity.finishAffinity()

    提前感谢你满足了我的好奇心D

    2 回复  |  直到 7 年前
        1
  •  0
  •   Rahul    7 年前

    使现代化 -这个答案是在提到项目使用最低Api级别16之前给出的。

    我研究了你们的代码,我认为开发人员在这背后有很好的意图。他想清除堆栈中的所有活动。就像他以前在这里 FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_NEW_TASK 但它需要API级别>11

    通过在中添加订阅 BaseActivity 我们可以确保 Activity 广播后将不再存在 Event.Type.ActivityFinish EventBus 。如果您考虑注销的情况,即要清除堆栈,则该方法将是一种更安全的方法。

        2
  •  0
  •   Aba    7 年前

    所以,这是一个交易。在屏幕上盯着看了几次之后,我发现之前的开发人员实际上使用了 goToMain activity.finish() ).

    总之


    是什么 EventBus ?

    表达 之间

    i、 e.不运行静态方法来调用活动自己的扩展函数。

    推荐文章