Sobes.tech
Middle
139

Қызметке қосылуға бола ма, егер Activity одан кейін іске қосылса?

AI-дан жауап

sobes.tech AI

Иә, мүмкін, Context және Binding пайдалана отырып.

  1. Қызметті құру: Service-ден мұрагерлік етеді (немесе IntentService/JobIntentService). onBind(Intent intent) әдісін жүзеге асыру керек, ол IBinder қайтарады.

    class MyBoundService : Service() {
    
        private val binder = MyBinder()
    
        inner class MyBinder : Binder() {
            fun getService(): MyBoundService = this@MyBoundService
        }
    
        override fun onBind(intent: Intent): IBinder {
            // Клиенттермен өзара әрекеттесу үшін IBinder қайтару
            return binder
        }
    }
    
  2. Activity-ден қосылу: Context.bindService() пайдалану. ServiceConnection жүзеге асыру.

    class MyActivity : AppCompatActivity() {
    
        private var myService: MyBoundService? = null
        private var isBound = false
    
        private val connection = object : ServiceConnection {
            // Қосылыс орнатылғанда шақырылады
            override fun onServiceConnected(className: ComponentName, service: IBinder) {
                val binder = service as MyBoundService.MyBinder
                myService = binder.getService()
                isBound = true
                // Енді myService қол жетімді және оның әдістерін шақыруға болады
            }
    
            // Қосылыс күтпеген жерден үзілгенде шақырылады
            override fun onServiceDisconnected(arg0: ComponentName) {
                isBound = false
                myService = null
            }
        }
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            // ...
            bindService(Intent(this, MyBoundService::class.java), connection, BIND_AUTO_CREATE)
        }
    
        override fun onDestroy() {
            super.onDestroy()
            if (isBound) {
                unbindService(connection)
                isBound = false
            }
        }
    }
    

bindService шақырғанда BIND_AUTO_CREATE белгісімен, егер қызмет әлі іске қосылмаған болса, ол жасалады. Activity оған қызмет құрылғаннан кейін қосылады. onServiceConnected ServiceConnection-да шақырылады, қызмет толық инициализацияланған және жұмысқа дайын болған кезде.

Маңызды — тіркеу өмірлік циклін дұрыс басқару, unbindService-ті Activity-дің тиісті өмірлік цикл әдісінде (мысалы, onDestroy немесе onStop / onPause, талап етілетін логикаға байланысты) шақыру.