在 Android MVP 模式中具有 Handler 的 Presenter

Presenter having Handler in Android MVP pattern

演示者有 Android 处理程序可以吗?
我知道演示者不应该有任何 Android 相关对象, 但我真的没有任何明确的答案。

事情是这样的, 这个演示者在另一个线程上运行磁盘 IO 任务, 与此同时,activity 不得不改变看法。

这些工作应该同时完成。 所以我决定将 activity 的处理程序作为参数传递 让演示者像这样向 activity 发送消息:

class FooPresenter: FooContract.Presenter {
    …
    private fun doDiskIOTask(handler: Handler) {
            handler.sendEmptyMessage(0)
        do_something_on_new_thread_and_join()
        handler.sendEmptyMessage(1)
    }
    …
}

activity 必须知道任务何时开始和完成并更改视图。 你能告诉我我做错了什么或更好的方法吗?

Handler 传递给演示者听起来不是个好主意,您将无法对其进行单元测试。我认为更好的方法是只在视图上调用一个方法,然后从那里在 UI 线程上调用 运行。如果您的视图界面是 Activity 您可以使用非常方便的 runOnUiThread 方法,例如

class MyActivity : AppCompatActivity, FooContract.View {

    override fun emptyMessage0Method(){
        runOnUiThread { 
            // manipulate views here
        }
    }

}