ANDROID HACKS #26  サービスを使う 担当:  Tatsuki Higashi Twitter : @htk16 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ サービスとは サービスを作成する サービスを呼び出す サービスに接続する Hack をさらに Hack する サービスから Activity を呼び出す Callback を使う 09/19/11
1.  サービスとは 09/19/11
1.  サービスとは サービス? アプリケーションコンポーネントの一つ ユーザとのインタラクションを伴わない機能 長時間に渡る処理を行うことも想定 他のアプリケーションに機能群として提供することができる サービスに関するよくある間違い 切り離されたプロセスではない 起動したアプリケーションのプロセス内で動作する スレッドではない 起動したアプリケーションの main thread で動作する 09/19/11
1.  サービスとは サービス利用の流れ サービスの起動  (3.  サービスを呼び出す) サービスに接続  (4.  サービスに接続する) サービスのメソッドを呼び出す   (4.  サービスに接続する )  接続可能なサービス クライアントと同じプロセスで動作するサービス 全ての public メソッドが利用可能 クライアントと異なるプロセスで動作するサービス AIDL (Android Interface Definition Language) で 指定された public メソッドのみを利用可能 09/19/11
2.  サービスを作成する 09/19/11
2.  サービスを作成する Service クラスの派生クラスとして作成する Service.onCreate サービスが最初に作成されたときに呼ばれる Service.onStartCommand パラメータ付きでサービスが作成されたときに呼ばれる(?) Service.onStart サービス呼び出し元が Context.startService を 呼び出したときに呼ばれる Service.onBind サービスに接続されたときに呼ばれる Service.onDestroy サービスが破棄されるときに呼ばれる 09/19/11
2.  サービスを作成する 09/19/11 150 ミリ秒毎にインテントを ブロードキャストする
2.  サービスを作成する AIDL を使用したサービスの作成 例 : ImyService サービスの作成 ImyService.aidl ファイルを作成 対応する ImyService.java が生成される Binder の派生クラス  ImyService.Stub  が定義される ImyService.Stub の派生クラスで  ImyService インターフェースの メソッドを実装する 09/19/11 提供するメソッド名を指定
2.  サービスを作成する 09/19/11 ImyService.stopService を実装 接続してきたクライアントには ImyServiceBinder を返す
3.  サービスを呼び出す 09/19/11
3.  サービスを呼び出す Context.startService(Intent i) インテント  i  で表されるサービスを呼び出す(起動する) Content.stopService 動作中のサービスを停止する 09/19/11
2.  サービスを呼び出す サービスを終了させる 原則的には以下のメソッドを呼ばないと終了しない Context.stopService 外部から終了させる Service.stopSelf 自ら終了 メモリ不足の際に,システムに停止させられる可能性がある (メモリが空いたら?)システムによって再起動される 再起動に失敗,例外を投げるなどして停止した場合は 再起動は行われない その場合は Context.startService などで起動する 09/19/11
3.  サービスを呼び出す 09/19/11 UpdateService へのインテントを作成 UpdateService の起動
4.  サービスに接続する 09/19/11
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) サービスとの接続が切れたときに呼ばれる   09/19/11
4.  サービスに接続する Content.bindService(Intent service,    ServiceConnection conn   int flag) flag:  接続する際の動作 BIND_AUTO_CREATE:  接続時にサービスが起動指定なければ起動させる BIND_DEBUG_UNBIND BIND_NOT_FOREGROUND 09/19/11
4.  サービスに接続する 09/19/11 UpdateService との接続を行う際の callback interface UpdateService への通信チャネル
4.  サービスに接続する 09/19/11 UpdateService.stopService を呼び出し
5. Hack をさらに Hack する 09/19/11
5. Hack をさらに Hack する 申し訳ありません,ここで力尽きました 09/19/11
参考 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 09/19/11

Android Hacks - Hack26

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