I'm trying to run some long running task in coroutine. Sometimes i need to cancel this coroutine, but after job.cancel() it still continues to work.
Here is some code demonstration similar to my real code:
class TestActivity : AppCompatActivity()
{
val job = Job()
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
lifecycleScope.launch(Dispatchers.IO + job, block =
{
for (i in 0..100)
{
Log.e("TestActivity", "Time passed = ${i * 100}")
Thread.sleep(100)
}
Log.e("TestActivity", "Code after cycle")
})
Handler().postDelayed(
{
Log.e("TestActivity", "**** Trying to cancel job ****")
job.cancel()
}, 3000)
}
}
In my logcat i get logs after cancelling job.
...
TestActivity: Time passed = 2300
TestActivity: Time passed = 2400
TestActivity: **** Trying to cancel job ****
TestActivity: Time passed = 2500
TestActivity: Time passed = 2600
...
TestActivity: Code after cycle
What is the proper way to cancel such tasks?