android hacks - hack26
DESCRIPTION
「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/TRANSCRIPT
![Page 1: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/1.jpg)
ANDROIDHACKS#26 サービスを使う担当: Tatsuki Higashi
Twitter : @htk16
23/04/12
1
![Page 2: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/2.jpg)
この資料について• この資料は下記の本をベースに勉強会で作成した資料です。
• 『 Android Hacks』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)
• この本の紹介ページが下記にあります。
• http://www.oreilly.co.jp/books/9784873114569/
23/04/12
2
![Page 3: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/3.jpg)
アジェンダ• サービスとは
• サービスを作成する
• サービスを呼び出す
• サービスに接続する
• Hackをさらに Hackする
• サービスから Activityを呼び出す• Callbackを使う
23/04/12
3
![Page 4: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/4.jpg)
1. サービスとは
23/04/12
4
![Page 5: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/5.jpg)
1. サービスとは• サービス?
• アプリケーションコンポーネントの一つ• ユーザとのインタラクションを伴わない機能• 長時間に渡る処理を行うことも想定• 他のアプリケーションに機能群として提供することができる
• サービスに関するよくある間違い
• 切り離されたプロセスではない• 起動したアプリケーションのプロセス内で動作する
• スレッドではない• 起動したアプリケーションの main threadで動作する
23/04/12
5
![Page 6: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/6.jpg)
1. サービスとは• サービス利用の流れ
• サービスの起動 (3. サービスを呼び出す)• サービスに接続 (4. サービスに接続する)• サービスのメソッドを呼び出す (4. サービスに接続する )
• 接続可能なサービス
• クライアントと同じプロセスで動作するサービス• 全ての publicメソッドが利用可能
• クライアントと異なるプロセスで動作するサービス• AIDL (Android Interface Definition Language)で指定された publicメソッドのみを利用可能
23/04/12
6
![Page 7: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/7.jpg)
2. サービスを作成する
23/04/12
7
![Page 8: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/8.jpg)
2. サービスを作成する• Serviceクラスの派生クラスとして作成する
• Service.onCreate
サービスが最初に作成されたときに呼ばれる• Service.onStartCommand
パラメータ付きでサービスが作成されたときに呼ばれる(?)• Service.onStart
サービス呼び出し元が Context.startServiceを呼び出したときに呼ばれる
• Service.onBindサービスに接続されたときに呼ばれる
• Service.onDestroyサービスが破棄されるときに呼ばれる
23/04/12
8
![Page 9: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/9.jpg)
2. サービスを作成する
23/04/12
9
150ミリ秒毎にインテントをブロードキャストする
![Page 10: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/10.jpg)
2. サービスを作成する• AIDLを使用したサービスの作成
• 例 : ImyServiceサービスの作成• ImyService.aidlファイルを作成
• 対応する ImyService.javaが生成される• Binderの派生クラス ImyService.Stub が定義される• ImyService.Stubの派生クラスで ImyServiceインターフェースのメソッドを実装する
23/04/12
10
提供するメソッド名を指定
![Page 11: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/11.jpg)
2. サービスを作成する
23/04/12
11
ImyService.stopServiceを実装
接続してきたクライアントにはImyServiceBinderを返す
![Page 12: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/12.jpg)
3. サービスを呼び出す
23/04/12
12
![Page 13: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/13.jpg)
3. サービスを呼び出す• Context.startService(Intent i)
インテント i で表されるサービスを呼び出す(起動する)
• Content.stopService
動作中のサービスを停止する
23/04/12
13
![Page 14: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/14.jpg)
2. サービスを呼び出す• サービスを終了させる
• 原則的には以下のメソッドを呼ばないと終了しない• Context.stopService 外部から終了させる• Service.stopSelf 自ら終了
• メモリ不足の際に,システムに停止させられる可能性がある
• (メモリが空いたら?)システムによって再起動される• 再起動に失敗,例外を投げるなどして停止した場合は再起動は行われない
• その場合は Context.startServiceなどで起動する
23/04/12
14
![Page 15: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/15.jpg)
3. サービスを呼び出す
23/04/12
15
UpdateServiceへのインテントを作成
UpdateServiceの起動
![Page 16: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/16.jpg)
4. サービスに接続する
23/04/12
16
![Page 17: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/17.jpg)
4. サービスに接続する• Content.bindService(Intent service,
ServiceConnection conn int flag)
• サービスへ接続する• service: 接続するサービスへのインテント• conn: サービスに接続,離脱した際の callback interface
• ServiceConnection.onServiceConnected(ComponentName name, IBinder binder)
• サービスに接続したときに呼ばれる• name: サービス名• binder: サービスへの接続チャネル
• ServiceConnection.onServiceDisconnected(ComponentName name)
• サービスとの接続が切れたときに呼ばれる
23/04/12
17
![Page 18: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/18.jpg)
4. サービスに接続する• Content.bindService(Intent service,
ServiceConnection conn int flag)
• flag: 接続する際の動作• BIND_AUTO_CREATE:
• 接続時にサービスが起動指定なければ起動させる• BIND_DEBUG_UNBIND
• BIND_NOT_FOREGROUND
23/04/12
18
![Page 19: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/19.jpg)
4. サービスに接続する
23/04/12
19
UpdateServiceとの接続を行う際のcallback interface
UpdateServiceへの通信チャネル
![Page 20: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/20.jpg)
4. サービスに接続する
23/04/12
20
UpdateService.stopServiceを呼び出し
![Page 21: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/21.jpg)
5. Hackをさらに Hackする
23/04/12
21
![Page 22: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/22.jpg)
5. Hackをさらに Hackする申し訳ありません,ここで力尽きました
23/04/12
22
![Page 23: Android Hacks - Hack26](https://reader035.vdocuments.net/reader035/viewer/2022062300/556155ddd8b42aa20d8b52f2/html5/thumbnails/23.jpg)
参考 URL• Android Developers | Services
• http://developer.android.com/reference/android/app/Service.html
• Android Developers | Binder
• http://developer.android.com/intl/ja/reference/android/os/Binder.html
23/04/12
23