💡 멀티스레드를 활용하여 앱 만들어보기
- 게임, 플레이어, 네트워크 활용 등 활용 방식은 무관
✔️ 실습 영상
✔️ 레퍼런스
DiffUtil(Recyclerview 관련)
https://thdev.tech/kotlin/2020/09/22/kotlin_effective_03/
게임 에셋 참고 자료
Context.getSharedPreferences(String, int)
에서 반환된 기본 설정 데이터에 액세스하고 수정하기 위한 인터페이스
private fun setScore() {
val score = intent.extras!!.getInt("score")
val sharedPreference = getSharedPreferences("ScoreInformation", 0)
var highestScore = sharedPreference.getInt("HighestScore", 0)
val editor = sharedPreference.edit()
if (score > highestScore) {
highestScore = score
editor.putInt("HighestScore", highestScore)
editor.apply()
}
tvScore = findViewById(R.id.tv_initialScore)
tvHighestScore = findViewById(R.id.tv_initialHighestScore)
tvScore!!.text = score.toString()
tvHighestScore!!.text = highestScore.toString()
}
어떤 클래스의 모든 인스턴스가 공유하는 객체를 만들고 싶을 때 사용
@JvmStatic
get()
/ set()
함수를 자동으로 만들라는 의미 //나는 이런 식으로 사용했다!
companion object {
var screenWidth: Int = 0
var screenHeight: Int = 0
@JvmStatic
var spaceShipWidth: Int = 0
@JvmStatic
var spaceShipHeight: Int = 0
}
screenWidth = point.x
screenHeight = point.y
spaceShipWidth = spaceShip.width //== spaceShip.getWidth()
spaceShipHeight = spaceShip.height //== spaceShip.getHeight()
커스텀 뷰 그리기에서 가장 중요한 단계는 onDraw()
메서드를 재정의하는 것
onDraw()
의 매개변수는 뷰에서 자기 자신을 그릴 때 사용할 수 있는 Canvas 객체onDraw()
를 호출하려면 먼저 Paint 객체를 만들어야 함override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.drawBitmap(spaceShip, spaceShipX, spaceShipY, null)
canvas.drawText("Score: " + (hitTargetCount * 10), 0f, TEXT_SIZE.toFloat(), scorePaint)
canvas.drawRect(
(screenWidth - 130).toFloat(),
10f,
(screenWidth - 130 + 10 * lives).toFloat(),
TEXT_SIZE.toFloat(),
healthPaint
)
handlerObject.postDelayed(runnable, UPDATE_MILLI_SECONDS)
}
개체를 미리 만드는 것은 중요한 최적화 작업이다. 뷰를 다시 그리는 경우는 매우 자주 발생하며 다수의 그리기 객체는 많은 비용을 들여 초기화해야 한다. 따라서, onDraw()
내에서 그리기 객체를 만들면 성능이 크게 저하되고 UI 가 느리게 표시될 수 있다.
스레드란 하나의 프로세스 안에서 실행되는 여러 흐름의 단위
var mediaPlayer: MediaPlayer? = null
private var handler = Handler(Looper.getMainLooper())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
thread {
handler.post {
mediaPlayer = MediaPlayer.create(this, R.raw.background_music)
mediaPlayer!!.isLooping //무한재생
mediaPlayer!!.start()
}
}
}
cf. 스레드와 관련한 간단한 예제는 https://velog.io/@morgankim/4th-Development-Practice 참고!
➕ AsyncTask 사용해보기!