Your SlideShare is downloading. ×
日本Androidの会の資料
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

日本Androidの会の資料

1,417
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,417
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Android : Service 小山 圭
  • 2. Agenda
    • Service とは何でしょう?
    • 最も簡単な Service
    • Notification
    • Callback
    • まとめ
  • 3. Android の Service
    • from Anatomy of an Android Application
      • A Service is code that is long-lived and runs without a UI.
      • UI が無い長生きするコード
      • Activity と違いフロントに表示されなくても実行
        • つまり常駐して実行を続けられる
      • 音楽の再生などに用います
  • 4. Service の実体
    • android.app.Service
    • Activity と同じく Context を継承
    • Task の 1 要素
    • サービスの実装は Service を継承
    • Context#startService() で起動
    • bindService() で起動中のサービスに接続、起動していなければ起動
    • stopService() にて停止
  • 5. Intent
    • Service も Intent をキーに起動します
    • Service を止めるキーも Intent です
    • 設定により他の Activity に公開可能
    • Intent は江川さんにおまかせします ><
  • 6. Service のライフタイム
    • 基本は start されてから stop されるまで
    • システムがメモリ状況により殺す場合有り
      • ただし殺害対象の優先順位は低い
    • bind している client が複数いる間は stop しても止まらない
  • 7. <service>
    • AndroidMenifest.xml にタグの記述が必要
      • 例 )
        • <service android:name= &quot;.PlayerService&quot; />
    • process 属性
      • この属性値に名前を付けると remote
      • local: 起動した Activitiy と同じプロセス
      • remote: 新しいプロセス
    • 細粒度のセキュリティ設定が可能
  • 8. ハンズオン
  • 9. 流れ
    • SD カードイメージを作る
    • エミュレータを SD カードをマウントして起動
    • 単純なプレーヤ
    • 単純なサービス
    • 単純な Notification
  • 10. PATH の設定
    • Linux, Mac OS X, Cygwin
      • cd $ANDROID_HOME/tools
      • PATH=$PATH:$PWD
    • Windows
      • cd %ANDROID_HOME% ools
      • path %path%;%cd%
  • 11. SD カードイメージを作る
    • mksdcard <size> <file>
      • サイズは K と M が指定可
        • 例 ) 128M, 16K
      • ファイルの拡張子は自動で付きません
      • エミュレータは 8M 以下の SD カードを使えません
      • 例 ) サイズ 1G バイトでファイル名が” 1G.img”
        • mksdcard 1024M 1G.img
  • 12. エミュレータを起動
    • SD カードをマウントして起動する
    • 例 ) ファイル名” 1G.img” のイメージを使用
      • emulator –sdcard 1G.img
    • Eclipse では起動オプションに入れられる
  • 13. mp3 を SD カードにコピー
    • adb push <local> <remote>
    • SD カードは /sdcard にマウントされます
      • 例 ) SD カードに全ての mp3 をコピー
        • adb push *.mp3 /sdcard
    • adb shell にて確認
      • adb shell で Linux の sh が起動します
      • cd /sdcard
      • ls –l
    • mp3 がない場合、
      • /system/media/audio/ringtones
  • 14. MediaScanner を起動
    • MediaScanner により DB の更新
      • メディアファイルの情報が DB 化
      • ホーム画面より
        • DevTools->Media Scanner
    • DB は sqlite3 形式
      • /data/data/com.android.providers.media/databases/external-label.db
      • SDK は sqlite3 が /system/xbin にあります
  • 15. 最も単純な Player
    • public class SimplePlayer extends Activity {
    • public void onCreate(Bundle savedInstanceState) {
    • super .onCreate(savedInstanceState);
    • Button b = new Button( this );
    • b.setText(&quot;Play&quot;);
    • b.setOnClickListener( new OnClickListener() {
    • public void onClick(View v) {
    • MediaPlayer mp = new MediaPlayer();
    • try {
    • mp.setDataSource(&quot;/sdcard/CrazyDream.ogg&quot;);
    • mp.prepare();
    • mp.start();
    • } catch (Exception e) {
    • throw new RuntimeException(e);
    • }
    • }
    • });
    • setContentView(b);
    • }
    • }
    演奏中にバックボタンを押すことで演奏が停止することを確認
  • 16. 最も単純なサービス
    • Activity は Service を起動、終了するだけ
    • 詳細はソースで
  • 17. 高度なサービス
  • 18. 高度なサービス
    • サービスを実行するだけでは足りない
    • サービスに処理対象や処理内容を依頼したい
    • サービスと通信する必要がある
  • 19. IPC
    • Interprocess Communication
    • Activity と Service は別プロセスの場合有
      • 直で呼べるとは限らない
      • pipe? socket? 共有メモリ ?
    • プロセス間通信手段の抽象化が必要
      • リモートでもローカルでも同じ手段で通信したい
  • 20. AIDL (1/2)
    • Android Interface Definition Language
    • Activity と Service 間の Interface を定義
      • IDL は昔からあります
        • CORBA
    • Java の Interface とほぼ同じです
      • 違いは引数に方向性があります
    • Interface を用いて通常の OOP が可能です
      • 接続手続は非常に面倒です
      • 一旦繋がればそれはただのインスタンス
  • 21. AIDL(2/2)
    • 拡張子 “ .aidl”
    • Eclipse ではファイル作成で行う
      • 保存すると即時で java にコンパイルされる
    • CUI では aidl
    • 方向の記述は in,out,inout
    • 実装の実際は document の AIDL を
  • 22. Stub
    • AIDL をコンパイルした java に存在
    • 呼び出される側が継承して概念としてのサービスを実装
      • 例 ) 指定された曲を演奏する
    • 呼び出す側は Interface として呼出に利用
  • 23. Callback
    • Activity が Service に依頼するだけでは足りない
    • Service が Activity に依頼する場合がある
      • 例 ) 曲の再生が次に移った時に画面を更新
    • これを Callback と呼ぶ
    • 実装は AIDL を用いるので変わらない
    • ただし実装場所が反対になる
  • 24. Parcellable
    • Acitivity と Service で class を共有したい
    • 分散オブジェクト指向がしたい
    • Android は Java の Serializable を用いない
    • Parcellable を継承して自前でシリアライズ
    • 使ってません ><
  • 25. サービスの利用手順 startService(Bundle) bindService(ServiceConection) Interface.Stub.asInterface(IBinder) ServiceConnection.onConnect(IBinder) Service Service.registerCallback(Callback) Service.method() Callback.method() Activity Service サービスの利用 コールバックの利用 登録 取得 作成 / 実行 接続
  • 26. MP3Player 完成版の解説
  • 27. 注意点
    • サービスの必要性を良く考えよう
      • CPU とストレージは進化している
      • 電池は進化していない
      • Android は省電力を最も重視している
      • 本当に Service が必要か?
      • Intent で即時起動、即時終了で良い可能性は?
  • 28. まとめ
    • Service による常駐アプリ作成法を学んだ
    • AIDL を用いた IPC の方法を学んだ
    • 以下について大体理解した
      • MediaPlayer
      • Notification
      • ContentProvider
  • 29. 謝辞
    • アイコン提供
      • http://www.iconarchive.com/
    • 写真と MP3 の提供
      • http://www.niconicommons.jp/