23
ANDROID HACKS #26 サササササササ ササTatsuki Higashi Twitter : @htk16 22/06/13 1

Android Hacks - Hack26

Embed Size (px)

DESCRIPTION

「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/

Citation preview

Page 1: Android Hacks - Hack26

ANDROIDHACKS#26 サービスを使う担当: Tatsuki Higashi

Twitter : @htk16

23/04/12

1

Page 2: Android Hacks - Hack26

この資料について• この資料は下記の本をベースに勉強会で作成した資料です。

• 『 Android Hacks』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)

• この本の紹介ページが下記にあります。

• http://www.oreilly.co.jp/books/9784873114569/

23/04/12

2

Page 3: Android Hacks - Hack26

アジェンダ• サービスとは

• サービスを作成する

• サービスを呼び出す

• サービスに接続する

• Hackをさらに Hackする

• サービスから Activityを呼び出す• Callbackを使う

23/04/12

3

Page 4: Android Hacks - Hack26

1. サービスとは

23/04/12

4

Page 5: Android Hacks - Hack26

1. サービスとは• サービス?

• アプリケーションコンポーネントの一つ• ユーザとのインタラクションを伴わない機能• 長時間に渡る処理を行うことも想定• 他のアプリケーションに機能群として提供することができる

• サービスに関するよくある間違い

• 切り離されたプロセスではない• 起動したアプリケーションのプロセス内で動作する

• スレッドではない• 起動したアプリケーションの main threadで動作する

23/04/12

5

Page 6: Android Hacks - Hack26

1. サービスとは• サービス利用の流れ

• サービスの起動 (3. サービスを呼び出す)• サービスに接続 (4. サービスに接続する)• サービスのメソッドを呼び出す (4. サービスに接続する )

• 接続可能なサービス

• クライアントと同じプロセスで動作するサービス• 全ての publicメソッドが利用可能

• クライアントと異なるプロセスで動作するサービス• AIDL (Android Interface Definition Language)で指定された publicメソッドのみを利用可能

23/04/12

6

Page 7: Android Hacks - Hack26

2. サービスを作成する

23/04/12

7

Page 8: Android Hacks - Hack26

2. サービスを作成する• Serviceクラスの派生クラスとして作成する

• Service.onCreate

サービスが最初に作成されたときに呼ばれる• Service.onStartCommand

パラメータ付きでサービスが作成されたときに呼ばれる(?)• Service.onStart

サービス呼び出し元が Context.startServiceを呼び出したときに呼ばれる

• Service.onBindサービスに接続されたときに呼ばれる

• Service.onDestroyサービスが破棄されるときに呼ばれる

23/04/12

8

Page 9: Android Hacks - Hack26

2. サービスを作成する

23/04/12

9

150ミリ秒毎にインテントをブロードキャストする

Page 10: Android Hacks - Hack26

2. サービスを作成する• AIDLを使用したサービスの作成

• 例 : ImyServiceサービスの作成• ImyService.aidlファイルを作成

• 対応する ImyService.javaが生成される• Binderの派生クラス ImyService.Stub が定義される• ImyService.Stubの派生クラスで ImyServiceインターフェースのメソッドを実装する

23/04/12

10

提供するメソッド名を指定

Page 11: Android Hacks - Hack26

2. サービスを作成する

23/04/12

11

ImyService.stopServiceを実装

接続してきたクライアントにはImyServiceBinderを返す

Page 12: Android Hacks - Hack26

3. サービスを呼び出す

23/04/12

12

Page 13: Android Hacks - Hack26

3. サービスを呼び出す• Context.startService(Intent i)

インテント i で表されるサービスを呼び出す(起動する)

• Content.stopService

動作中のサービスを停止する

23/04/12

13

Page 14: Android Hacks - Hack26

2. サービスを呼び出す• サービスを終了させる

• 原則的には以下のメソッドを呼ばないと終了しない• Context.stopService 外部から終了させる• Service.stopSelf 自ら終了

• メモリ不足の際に,システムに停止させられる可能性がある

• (メモリが空いたら?)システムによって再起動される• 再起動に失敗,例外を投げるなどして停止した場合は再起動は行われない

• その場合は Context.startServiceなどで起動する

23/04/12

14

Page 15: Android Hacks - Hack26

3. サービスを呼び出す

23/04/12

15

UpdateServiceへのインテントを作成

UpdateServiceの起動

Page 16: Android Hacks - Hack26

4. サービスに接続する

23/04/12

16

Page 17: Android Hacks - Hack26

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

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

4. サービスに接続する

23/04/12

19

UpdateServiceとの接続を行う際のcallback interface

UpdateServiceへの通信チャネル

Page 20: Android Hacks - Hack26

4. サービスに接続する

23/04/12

20

UpdateService.stopServiceを呼び出し

Page 21: Android Hacks - Hack26

5. Hackをさらに Hackする

23/04/12

21

Page 22: Android Hacks - Hack26

5. Hackをさらに Hackする申し訳ありません,ここで力尽きました

23/04/12

22

Page 23: Android Hacks - Hack26

参考 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