Вопрос может показаться тупым т.к. я недавно начал изучать coroutines, но все же.
Допустим есть такой класс:
class MainActivity : AppCompatActivity(), CoroutineScope {
private var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
override fun onCreate(savedInstanceState: Bundle?) {
launch {
var user: UserData? = service.doLogin("test", "1111")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
override fun onDestroy() {
super.onDestroy()
job.cancel()
}
}
Метод doLogin выглядит так:
suspend fun doLogin(login: String, pass: String): UserData? {
return try {
service.logIn(login, pass).await()
} catch (e: Exception) {
e.printStackTrace()
null
}
}
Это все работает как нужно, но, вопрос заключается в следующем: можно ли как-то так написать код, что б вызов service.doLogin() не нужно было оборачивать в launch?
Т.е. на подобие того как это работало бы в javascript (синтаксический пример):
async onCreate(savedInstanceState: Bundle?) {
var user: UserData? = await service.doLogin("test", "1111")
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
Мы ведь не можем написать так: override suspend fun onCreate.
Может можно каким-либо образом написать аннотацию @launch(), которая бы выполнила код onCreate в CoroutineScope. Или же все это дурацкая затея?