코틀린, 코트린,코ㅌ리…..코루틴!
코루틴의 개념은 공부했지만 왜 쓰는지 모르는 동무들을 위해 간단하게 예시를 만들어봤다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_start : Button = findViewById(R.id.btn_start)
btn_start.setOnClickListener{
execute("작업 완료")
}
}
private fun execute(result: String) {
for(i in 1..100000) {
Log.e("delay : ", ""+i)
}
Toast.makeText(
this, "Done",
Toast.LENGTH_SHORT
).show()
}
}
implementation "androidx.activity:activity-ktx:1.4.0"
withContext(Dispatchers.IO){}
에 넣기 - IO thread로 작업을 넘긴다override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_start : Button = findViewById(R.id.btn_start)
btn_start.setOnClickListener{
lifecycleScope.launch{
// 4. scope 지정
execute("작업 완료")
}
}
}
private suspend fun execute(result: String) {
// 1. suspend 추가
// 2. execute가 다른 곳에서도 사용하는지 확인
withContext(Dispatchers.IO){
// 3. withContext 작업을 IO 쓰레드로 이동시킴
for(i in 1..100000) {
Log.e("delay : ", ""+i)
}
Toast.makeText(
this@MainActivity, result,
Toast.LENGTH_SHORT
).show()
}
}
private suspend fun execute(result: String) {
withContext(Dispatchers.IO){
// withContext 작업을 IO thread로 이동시킴
for(i in 1..100000) {
Log.e("delay : ", ""+i)
}
runOnUiThread{
Toast.makeText(
// UI Thread로 작업을 넘긴다.
this@MainActivity, result,
Toast.LENGTH_SHORT
).show()
}
}
}
var customProgressDialog: Dialog? = null
private fun cancelProgressDialog() {
if (customProgressDialog != null) {
customProgressDialog?.dismiss()
customProgressDialog = null
}
}
private fun showProgressDialog() {
customProgressDialog = Dialog(this)
customProgressDialog?.setContentView(R.layout.dialog_custom_progress)
customProgressDialog?.show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn_start : Button = findViewById(R.id.btn_start)
btn_start.setOnClickListener{
showProgressDialog()
// dialog를 보여준다.
lifecycleScope.launch{
execute("작업 완료")
}
}
}
private suspend fun execute(result: String) {
withContext(Dispatchers.IO){
// withContext 작업을 다른 쓰레드로 이동시킴
for(i in 1..1000000) {
Log.e("delay : ", ""+i)
}
runOnUiThread{
cancelProgressDialog()
// 작업이 끝나면 dialog를 사라지게하고 완료 메세지를 보여준다.
Toast.makeText(
this@MainActivity, result,
Toast.LENGTH_SHORT
).show()
}
}
}