在 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
}
}
}
演示者有 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
}
}
}