狠狠撸

狠狠撸Share a Scribd company logo
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

More Related Content

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
  • 5. 1. サービスとは サービス? アプリケーションコンポーネントの一つ ユーザとのインタラクションを伴わない機能 長時間に渡る処理を行うことも想定 他のアプリケーションに機能群として提供することができる サービスに関するよくある間違い 切り離されたプロセスではない 起動したアプリケーションのプロセス内で動作する スレッドではない 起動したアプリケーションの main thread で動作する 09/19/11
  • 6. 1. サービスとは サービス利用の流れ サービスの起動 (3. サービスを呼び出す) サービスに接続 (4. サービスに接続する) サービスのメソッドを呼び出す (4. サービスに接続する ) 接続可能なサービス クライアントと同じプロセスで動作するサービス 全ての public メソッドが利用可能 クライアントと異なるプロセスで動作するサービス AIDL (Android Interface Definition Language) で 指定された public メソッドのみを利用可能 09/19/11
  • 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 を返す
  • 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 の起動
  • 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 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