==
сравнивает ссылки на объекты в Java и не является исключением для объектов String
.
Для сравнения фактического содержимого объектов (в том числе String
) необходимо использовать equals
.
Если сравнение двух объектов String
с использованием ==
оказывается true
, это связано с тем, что объекты String
были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String
. Не следует ожидать сравнения одного объекта String
, содержащего то же содержимое, что и другой объект String
, используя ==
для оценки как true
.
С моей точки зрения, вы правильно используете сопрограмму. Несколько замечаний:
Вам не нужно передавать view: MyView
в конструктор и присваивать его значение свойству в блоке init
. Вместо этого вы можете пометить параметр view
в конструкторе как val
, и он станет свойством: функция
class MyPresenter(private val view: MyView,
private val coroutineCtx: CoroutineContext = Dispatchers.Main) : CoroutineScope {
// you can get rid of the next lines:
private var view: MyView? = null
init {
this.view= view
}
}
launch
возвращает значение Job
. Вы можете добавить функцию расширения, например, launchSilent
, чтобы вернуть Unit
:
fun CoroutineScope.launchSilent(
context: CoroutineContext = EmptyCoroutineContext,
start: CoroutineStart = CoroutineStart.DEFAULT,
block: suspend CoroutineScope.() -> Unit
) {
launch(context, start, block)
}
Из моих наблюдений job.cancel()
работает правильно: когда вы вызываете его, сопрограмма должна остановиться. Например, если мы поместим несколько журналов:
fun updateData() = launch{
Log.d("Tag", "launch start")
val scanResult = repo.updateData()
when(scanResult) {
success -> { this.view.showSuccess()}
}
Log.d("Tag", "launch end")
}
и добавим некоторую задержку в функцию репо updateData()
:
suspend fun updateData(): Result<Void> {
delay(5000)
val response = API.update().await()
return response
}
И, например, во фрагменте после вызова presenter.updateData()
] мы называем что-то вроде Handler().postDelayed({ presenter.stopUpdate() }, 3000)
, мы не увидим «конец запуска» в журнале Logcat .