Size: a a a

2019 October 26

L

László in Kotlin Start
Dumb-вопрос: косвенно касается андройда но все таки больше именно Kotlin части, у меня есть класс унаследованный от DiffUtil.Callback. В конструкторе прописываются типы данных, например List<String>, у меня  же задача в том чтобы присвоить любые типы которые наследуют абстрактный класс: AbstractRestorable.

open class AbstractRestorable {
   var id: String = generateId()
}


Суть в том чтобы получить в реализации абстрактных методов этот id.
Пробовал передавать mutableListOf<Any>, но так не работает.
источник

D

Denys in Kotlin Start
El Mariachi 🎸
можно ли так
Лучше захватывать переменную, а не использовать ссылку в таком случае:
val prevJob = scanJob
scanJob = launch {
   prevJob?.cancelAndJoin()
}
источник

E🎸

El Mariachi 🎸 in Kotlin Start
кстати да, хотел же попробовать
источник

E🎸

El Mariachi 🎸 in Kotlin Start
спсб, что напомнили )
источник

D

Denys in Kotlin Start
László
Dumb-вопрос: косвенно касается андройда но все таки больше именно Kotlin части, у меня есть класс унаследованный от DiffUtil.Callback. В конструкторе прописываются типы данных, например List<String>, у меня  же задача в том чтобы присвоить любые типы которые наследуют абстрактный класс: AbstractRestorable.

open class AbstractRestorable {
   var id: String = generateId()
}


Суть в том чтобы получить в реализации абстрактных методов этот id.
Пробовал передавать mutableListOf<Any>, но так не работает.
class Callback(data: List<T : AbstractRestorable>) : DiffUtils.Callback {
источник

L

László in Kotlin Start
Denys
class Callback(data: List<T : AbstractRestorable>) : DiffUtils.Callback {
спасибо, скажите а как называется эта операция,  хочу прочитать про это подробнее
источник

D

Denys in Kotlin Start
El Mariachi 🎸
кстати да, хотел же попробовать
Просто раньше код получался таким:
class A {
   var scanJob

   launch {
       this@A.scanJob.cancel()
   }
}
источник

E🎸

El Mariachi 🎸 in Kotlin Start
Denys
Лучше захватывать переменную, а не использовать ссылку в таком случае:
val prevJob = scanJob
scanJob = launch {
   prevJob?.cancelAndJoin()
}
нет, не оно, все то же самое....
источник

D

Denys in Kotlin Start
László
спасибо, скажите а как называется эта операция,  хочу прочитать про это подробнее
источник

L

László in Kotlin Start
Еще раз спасибо. Хорошего вам дня!
источник

D

Denys in Kotlin Start
László
Еще раз спасибо. Хорошего вам дня!
Пожалуйста. Вам тоже. :)
источник

З

Захар in Kotlin Start
Мальчики мне без вас так было плохо
источник

E🎸

El Mariachi 🎸 in Kotlin Start
El Mariachi 🎸
scanJob = lifecycleScope.launch {
   withContext(Dispatchers.Main) {
      Log.d("Job", "Start new job:$resId")
      scanJob?.cancelAndJoin()
      Log.d("Job", "Joined:$resId")
      try {
          ...
          withContext(Dispatchers.Default) {... }
          Log.d("Job", "Complete:$resId")
      } finally {
          Log.d("Job", "Finally:$resId")
      }
   }
}
все, я понял... затупил как всегда на ровном месте... когда я запускаю вторую задачу, я перезабиваю scanJob свой, и она ждет окончания первой задачи... но когда я в этот момент запускаю новую задачу, я убиваю вторую задачу, которая в состоянии Join была, а первая задача продолжает свою нудную работу.
источник

E🎸

El Mariachi 🎸 in Kotlin Start
короче в очередь надо складывать
источник

AM

Andrew Mikhaylov in Kotlin Start
Захар
Мальчики мне без вас так было плохо
Я бы на твоём месте не начинал с оффтопа.
источник

З

Захар in Kotlin Start
Andrew Mikhaylov
Я бы на твоём месте не начинал с оффтопа.
Я тоже так подумал и ограничился одним сообщением

Убери из чс
источник

D

Denys in Kotlin Start
El Mariachi 🎸
все, я понял... затупил как всегда на ровном месте... когда я запускаю вторую задачу, я перезабиваю scanJob свой, и она ждет окончания первой задачи... но когда я в этот момент запускаю новую задачу, я убиваю вторую задачу, которая в состоянии Join была, а первая задача продолжает свою нудную работу.
Не совсем понял. Если вы захватываете значение предидущей задачи - то все ок.
источник

D

Denys in Kotlin Start
Я вот подумал, что там нюанс есть
источник

D

Denys in Kotlin Start
>  If the Job of the invoking coroutine is cancelled or completed when this suspending function is invoked or while it is suspended, this function throws CancellationException.
источник

D

Denys in Kotlin Start
Попробуйте
launch {
   if (prevJob?.isCompleted?.not() == false) {
           prevJob.cancelAndjoin()
источник