μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- λ°μ΄ν°λ² μ΄μ€
- ν°μ€ν 리μ±λ¦°μ§
- λ°μν
- css
- database
- Kλ°°ν°λ¦¬
- Kλ°°ν°λ¦¬λ 볼루μ
- Python
- λ§μΌλ΄κ°μΈμμλ€μμ°λ€λ©΄
- ComputerScience
- νμ΄μ¬
- μλ°μ€ν¬λ¦½νΈ
- λ μ
- λΌνλΌμ€μλ§λ
- μΉνμ΄μ§λ§λ€κΈ°
- μλ°
- μ€λΌν΄
- κΉλ―Έκ²½μλ§νμμ
- JavaScript
- 리μ‘νΈ
- μν
- κ°λ°
- html
- Java
- μ±
- νλ‘κ·Έλλ°
- μΉνΌλΈλ¦¬μ±
- μ½λ©
- μ€λΈμ
- μ»΄ν¨ν°κ³Όν
- Today
- Total
JiYoung Dev π₯
[Android] μ€λ λ(Thread) & νΈλ€λ¬(Handler) (2023.07.27) λ³Έλ¬Έ
[Android] μ€λ λ(Thread) & νΈλ€λ¬(Handler) (2023.07.27)
Shinjio 2023. 7. 27. 17:26Thread
νμ μ€λ λ μ μ₯
μ»΄ν¨ν° μμ μ CPUκ° ν¨. CPUλ νλ²μ νλμ μΌμ²λ¦¬λ₯Ό ν¨
μμ μ€μΌμ₯΄λ§μ ν΅ν΄ λ©ν° μ€λ λλ₯Ό κ°λ₯νκ² ν¨ → μλΆν μμ€ν
μ€λ λ λΌμ΄νμ¬μ΄ν΄ (μ€λ λ μλͺ μ£ΌκΈ°)
- 첫λ²μ§Έ μ€λ λλ λλ²μ§Έ μ€λ λμκ² μ보 : yeild
- λλ²μ§Έ μ€λ λλ 첫λ²μ§Έ μ€λ λμ cpuλ κ°λ‘μ± : interupt
- start(), run(), yeild(), interupt(), sleep() λ±μ λ©μλλ‘ κ΅¬νμ΄ λμ΄ μμ
- μ€λ λ1 μμ ν λ€μ μ€νλ λλ run() μνλ‘ μ€νλ¨(λ€μ start() X)
Handler
μλλ‘μ΄λμμ μ°λ λλ₯Ό μ¬μ©νκΈ° μν΄μλ Handlerκ° νμν¨
μλλ‘μ΄λ μ΄νμ μ€νμν€λ©΄ Taskκ° μμ±λκ³ κ·Έ μμ activityλ€μ΄ μμ΄λ ꡬ쑰
μλλ‘μ΄λλ μ΄νμ μ¬λ¬κ° μ€νμν¬ μ μμ → νλμ μ΄ν리μΌμ΄μ μ Threadλ‘ λ§λ€μ΄λμμ
μ€λ λλ λκΈ°νκ° νμνλ€
MainThread : UIμμ , Click λ±μ μ§ν
μλλ‘μ΄λ μ체μμ UI νΌμ μ΄ μκΈΈ κ²μ μλ°©νκΈ° μν΄ SubTreadμμ UIμ μλ μ μλλ‘ λ§λ€μ΄ λμμ
μ΄λ¬ν μ΄μ λ‘ μ€κ°μ Handlerλ₯Ό λ°°μΉν¨
Handlerμ μμ μμ² → λ©μμ§ μ μ‘
Handlerλ MainThreadμ μμ Queueμ μ κ·Όνμ¬ μμ μ μ§ν
μ€λ λ & νΈλ€λ¬ ꡬν
package com.sjy.ex20230727
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.widget.Button
import android.widget.TextView
class MainActivity : AppCompatActivity() {
lateinit var btnStart1 : Button
lateinit var tvStart1 : TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Threadλ classλ‘ μ€κ³νλ€!
// classλ₯Ό μ€ννλ €λ©΄ κ°μ²΄ μμ±νκ³ μ€νν΄μΌ ν¨
btnStart1 = findViewById(R.id.btnStart1)
tvStart1 = findViewById(R.id.tvStart1)
btnStart1.setOnClickListener {
var th1 : cntThread = cntThread()
//Threadλ₯Ό μ€ννλ €λ©΄ κ°μ²΄λ₯Ό μμ±ν΄μΌ ν¨
th1.start() //μ€λΉ, μ€ν μ μ μ€λΉλΆν° ν΄μΌν¨. start λ΄λΆμμ μλμΌλ‘ μ€νλ¨
//μ μνκΉμ§λ§ νλ©΄ νκΉ -> μλλ‘μ΄λμ΄κΈ° λλ¬Έμ νκ°μ§ μμ
μ λ ν΄μΌ ν¨
//-> Handler μ¬μ©
}
}
var cntHandler : Handler = object: Handler(Looper.getMainLooper()){
//object : λ°λ‘ κ°μ²΄ν
//Handler cntHandler = new Handler(Looper.getManinLooper())
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
//λ©μΈμ§λ₯Ό λ°μμ μ²λ¦¬νλ κ³³
tvStart1.text = msg.arg1.toString()
}
}
inner class cntThread : Thread(){
//ν΄λμ€ μμ ν΄λμ μμ±μ ν€μνΈ : inner
//Thread ν΄λμ€λ Thread()λ₯Ό μμλ°μ
//run() λ©μλλ₯Ό μ€λ²λΌμ΄λ©
//1. Thread ν΄λμ€ μμ (extends)
//2. Runnable μΈν°νμ΄μ€ ꡬν (implements)
//λ¨μΆν€ : alt+insert
override fun run() {
// super.run()
//super.λ©μλ μ΄λ¦
//=> μμ ν΄λ λλ κ²½μ° : 맀κ°λ³μκ° μμ λ
//=> μμ νλ©΄ μλλ κ²½μ° : 맀κ°λ³μκ° μμ λ
//10~1κΉμ§ μΈκΈ°
for(i in 10 downTo 1){
//1. λ©μΈμ§ μμ±
var msg : Message = Message()
//2. λ°μ΄ν° μΈν
- 3κ°κΉμ§λ§ κ°λ₯(arg1 : Int, arg2 : Int, obj : object)
//=> λ°μ΄ν°κ° λ§μ λ VOλ₯Ό μ€κ³νμ¬ objμ λ΄μμ λ³΄λΌ μ μμ
msg.arg1 = i
//3. Handlerμ μ μ‘
cntHandler.sendMessage(msg)
Thread.sleep(500)
}
//μμ μμ
μ΄ λλλ©΄ destroyedλ¨ (κ³μ μ€νμνκ° μλ)
//μ¦, Threadλ runλ©μλκ° μ’
λ£λλ©΄ μλ©Έλ¨
}
}
}
* start1 λ²νΌμ 2λ² ν΄λ¦
→ Thread 2κ° μμ±
μΆμν
package com.sjy.ex20230727
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.Message
import android.widget.Button
import android.widget.TextView
import org.w3c.dom.Text
class MainActivity : AppCompatActivity() {
lateinit var btnStart1 : Button
lateinit var tvStart1 : TextView
lateinit var btnStart2 : Button
lateinit var tvStart2 : TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Threadλ classλ‘ μ€κ³νλ€!
// classλ₯Ό μ€ννλ €λ©΄ κ°μ²΄ μμ±νκ³ μ€νν΄μΌ ν¨
btnStart1 = findViewById(R.id.btnStart1)
tvStart1 = findViewById(R.id.tvStart1)
btnStart2 = findViewById(R.id.btnStart2)
tvStart2 = findViewById(R.id.tvStart2)
btnStart1.setOnClickListener {
var th1 : cntThread = cntThread(tvStart1)
//Threadλ₯Ό μ€ννλ €λ©΄ κ°μ²΄λ₯Ό μμ±ν΄μΌ ν¨
th1.start() //μ€λΉ, μ€ν μ μ μ€λΉλΆν° ν΄μΌν¨. start λ΄λΆμμ μλμΌλ‘ μ€νλ¨
//μ μνκΉμ§λ§ νλ©΄ νκΉ -> μλλ‘μ΄λμ΄κΈ° λλ¬Έμ νκ°μ§ μμ
μ λ ν΄μΌ ν¨
//-> Handler μ¬μ©
}
btnStart2.setOnClickListener {
var th1 : cntThread = cntThread(tvStart2)
th1.start()
}
}
var cntHandler : Handler = object: Handler(Looper.getMainLooper()){
//object : λ°λ‘ κ°μ²΄ν
//Handler cntHandler = new Handler(Looper.getManinLooper())
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
//λ©μΈμ§λ₯Ό λ°μμ μ²λ¦¬νλ κ³³
var tv : TextView = msg.obj as TextView
//as : νλ³ν
tv.text = msg.arg1.toString()
// tvStart1.text = msg.arg1.toString()
}
}
inner class cntThread(var tv : TextView) : Thread(){
//ν΄λμ€ μμ ν΄λμ μμ±μ ν€μνΈ : inner
//Thread ν΄λμ€λ Thread()λ₯Ό μμλ°μ
//run() λ©μλλ₯Ό μ€λ²λΌμ΄λ©
//1. Thread ν΄λμ€ μμ (extends)
//2. Runnable μΈν°νμ΄μ€ ꡬν (implements)
//λ¨μΆν€ : alt+insert
override fun run() {
// super.run()
//super.λ©μλ μ΄λ¦
//=> μμ ν΄λ λλ κ²½μ° : 맀κ°λ³μκ° μμ λ
//=> μμ νλ©΄ μλλ κ²½μ° : 맀κ°λ³μκ° μμ λ
//10~1κΉμ§ μΈκΈ°
for(i in 10 downTo 1){
//1. λ©μΈμ§ μμ±
var msg : Message = Message()
//2. λ°μ΄ν° μΈν
- 3κ°κΉμ§λ§ κ°λ₯(arg1 : Int, arg2 : Int, obj : object)
//=> λ°μ΄ν°κ° λ§μ λ VOλ₯Ό μ€κ³νμ¬ objμ λ΄μμ λ³΄λΌ μ μμ
msg.arg1 = i
msg.obj = tv
//3. Handlerμ μ μ‘
cntHandler.sendMessage(msg)
Thread.sleep(500)
}
//μμ μμ
μ΄ λλλ©΄ destroyedλ¨ (κ³μ μ€νμνκ° μλ)
//μ¦, Threadλ runλ©μλκ° μ’
λ£λλ©΄ μλ©Έλ¨
}
}
}
'full stack > μλλ‘μ΄λ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Android] λ΄κ° λ³΄λΈ μ±ν μ€λ₯Έμͺ½μ λ°°μΉνκΈ° (2023.07.27) (0) | 2023.07.27 |
---|---|
[Android] μλλ‘μ΄λ μ€νλμ€ μ΄ν리μΌμ΄μ λ°°ν¬ (2023.07.27) (0) | 2023.07.27 |
[Android] FireBase μ°λ (2023.07.25~27) (0) | 2023.07.26 |
[Android] SharedPreference (2023.07.26) (0) | 2023.07.26 |
[Android] android studio λ‘λ© νλ©΄ μ€μ (2023.07.26) (0) | 2023.07.26 |