是否可以使用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)
}
…
}
活动必须知道任务何时开始并完成,并更改视图。 如果我做错了或更好的方式,你能告诉我吗?
答案 0 :(得分:1)
将Handler
传递给演示者并不是一个好主意,您将无法对其进行单元测试。我认为更好的方法是在视图上调用一个方法,然后从那里运行UI线程。如果您的视图界面是Activity
,则可以使用非常方便的runOnUiThread
方法,例如
class MyActivity : AppCompatActivity, FooContract.View {
override fun emptyMessage0Method(){
runOnUiThread {
// manipulate views here
}
}
}