본문 바로가기
Kotlin/Kotlin 팁

안드로이드 서비스 활용

by MonoSoft 2020. 10. 14.
728x90
반응형

안드로이드 서비스 

 

 

 

package com.monosoft.androidservice

import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.ServiceConnection
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.IBinder
import android.view.View

class MainActivity : AppCompatActivity() {

lateinit var serviceIntent:Intent //초기화 필요없고 나중에 초기화를 쓸거다

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//서비스 클래스 담아준다.
serviceIntent = Intent(this,MyService::class.java)
//서비스 : 화면이 없는 액티비티
//액티비티랑 서비스랑 동시에 띄우면 양쪽의 코드를 동시를 실행시키면
//한쪽의 코드가 끝난 다음에 다른쪽 코드가 실행됨
//예를 들어 액티비티 코드가 끝나면 서비스 코드가 실행됨
//반대로 하면 반대로 순서로..
//왜냐 메인 스레드에서 실행하기 때문에
//만약에 백그라운드에서 실행시킬려면 스레드를 하나 생성해서 처리를 해야됨

}

fun serviceStart(view : View) {
serviceIntent.action = MyService.ACTION_CREATE
//안드로이드에다가 알려준다.
startService(intent)
}

fun serviceStop(view:View) {
stopService(intent)
}

var myService:MyService? = null
//var , val 변할수 있는 값 없는값 구분
var isService = false
val connection = object : ServiceConnection {
override fun onServiceConnected(p0: ComponentName?, iBinder: IBinder?) {
isService = true
//연결되는 순간 onBind에 코딩한 MYbinde를 파라메타로 넣어줌
val binder = iBinder as MyService.MyBinder
myService = binder.getService()
}

override fun onServiceDisconnected(p0: ComponentName?) {
isService = false
}
}

fun serviceBind(view:View) {
bindService(intent,connection,Context.BIND_AUTO_CREATE)

}

fun serviceCommand() {
myService?.create()
myService?.delete()
}

fun serviceUnBind(view:View) {

}
}

 

 

 

package com.monosoft.androidservice

import android.app.Service
import android.content.Intent
import android.os.Binder
import android.os.IBinder
import android.util.Log

class MyService : Service() {

companion object { //서비스안에 명령어를 액티비티에서 직접 접근 가능함
val ACTION_CREATE = "create"
val ACTION_DELETE = "delete"
}

//서비를 가져다 쓸수있게 해주는것
inner class MyBinder : Binder() {
fun getService() :MyService {
return this@MyService
}
}

override fun onBind(intent: Intent): IBinder {
return MyBinder()
}

//시작 시 동작
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

val action = intent?.action

when(action) {
ACTION_CREATE -> create()
ACTION_DELETE -> delete()
}

return super.onStartCommand(intent, flags, startId)
}

fun create() {
Log.d("서비스","create()가 호출됨")
}

fun delete() {
Log.d("서비스","delete()가 호출됨")
}

}

 

 

728x90
반응형

댓글