演示者在Android MVP模式中具有处理程序

时间:2018-02-21 17:17:20

标签: android android-mvp

是否可以使用Android Handler的演示者? 我知道演示者不应该有任何与Android相关的对象, 但我真的没有任何明确的答案。

这是事情, 此演示者在另一个线程上运行磁盘IO任务, 同时,活动必须改变其观点。

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

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

活动必须知道任务何时开始并完成,并更改视图。 如果我做错了或更好的方式,你能告诉我吗?

1 个答案:

答案 0 :(得分:1)

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

class MyActivity : AppCompatActivity, FooContract.View {

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

}