2021/05/23

[android] Service (2) - bindって何よ

前回に引き続き、Android OSのServiceについてだ。

うちのサイトは「技術日記」なので、学習としては向いていないと思う。
その代わり、正しくなかったことも書いているはず。
まあ、ネットで調べながらだとそういうことも少なくなってしまうが。


で、Serviceだ。

AndroidStudioでMyServiceというサービスを組み込んでみたのだが、その状態でアプリを起動させてもサービスが立ち上がった気配がない。気配というのは、overrideできる関数を全部オーバーライドしてLogを埋め込んだもののlogcatに何も出力されなかったからだ。

というわけで、ServiceはActivityからの起動が必要となる。
「別のアプリ コンポーネントがサービスを開始でき」と書いてあるので、別にActivityから起動させる必要はないのだが、知らないサービスを起動させることはできないだろうから、まあだいたいはServiceとセットになったActivityから起動させるのが妥当だろう。

01: package com.example.sample0
02: 
03: import android.content.Intent
04: import android.os.Bundle
05: import androidx.appcompat.app.AppCompatActivity
06: 
07: class MainActivity : AppCompatActivity() {
08:     override fun onCreate(savedInstanceState: Bundle?) {
09:         super.onCreate(savedInstanceState)
10:         setContentView(R.layout.activity_main)
11: 
12:         intent = Intent(this, MyService::class.java)
13:         startService(intent)
14:     }
15: }

Kotlinだとnewは不要なのは知っていたのだが、intentの書き方が分からんかった。
インテントとインテントフィルタ」に書いてあったしエラーにならなかったので、これでよいのだろう。

 

MyService.ktはオーバーライドできそうな関数にログを埋め込んだだけ。

01: class MyService : Service() {
02:     private val logTag: String = "MyService"
03: 
04:     override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
05:         Log.d(logTag, "onStartCommand")
06:         return super.onStartCommand(intent, flags, startId)
07:     }
08: 
09:     override fun onBind(intent: Intent): IBinder {
10:         Log.d(logTag, "onBind")
11:         TODO("Return the communication channel to the service.")
12:     }
13: 
14:     override fun onCreate() {
15:         Log.d(logTag, "onCreate")
16:         super.onCreate()
17:     }
18: 
19:     override fun onDestroy() {
20:         Log.d(logTag, "onDestroy")
21:         super.onDestroy()
22:     }
23: }

これでActivityを立ち上げると、onCreate, onStartCommandの順でlogcatが出てきた(エミュレータで起動)。

そのまま放置していたが何も変わらない。
そしてアプリを閉じる(Androidのホーム表示)にすると、1分後にonDestroyがlogcatに出てきた。

たった1分かー。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。