Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RecentApps

4,397 views

Published on

Android 4.0 ICEで搭載されたアプリ一覧を表示するタスク管理画面の話題です。
カスタマイズの可能性について調査しました

Published in: Technology
  • Be the first to comment

RecentApps

  1. 1. SystemUI.apk 、 ActivityManager が提供する タスク管理画面のカスタマイズ @mhidaka
  2. 2. 自己紹介 <ul><li>組込技術者 </li></ul><ul><ul><li>あんなものやこんなもの作ってます </li></ul></ul><ul><li>モバイル </li></ul><ul><ul><li>techbooster.org </li></ul></ul><ul><ul><li>開発情報: 400 post </li></ul></ul><ul><ul><li>android / wp7 / HTML5 / GAE サーバサイド </li></ul></ul>  Twitter Account @mhidaka
  3. 3. 今日のターゲット
  4. 4. 発表概要 <ul><li>ICSを調べてみた </li></ul><ul><ul><li>アプリ一覧画面の調査 </li></ul></ul><ul><li>サムネイルは誰が… </li></ul><ul><ul><li>フレームワークで? </li></ul></ul><ul><ul><li>カスタマイズできる? </li></ul></ul>
  5. 5. つまり
  6. 6. Logcat みたら早いんじゃ… <ul><li>アプリ一覧>スワイプでアプリ停止 </li></ul>あれ?ログがすくない…!?
  7. 7. 推測: ActivityManager? <ul><li>アプリケーション管理が役目 </li></ul><ul><ul><li>Android Framework を構成するモジュール </li></ul></ul><ul><li>方針 </li></ul><ul><ul><li>Log の少なさから、 ActivityManager があやしい </li></ul></ul><ul><ul><li>Frameworker じゃないと改造できない </li></ul></ul>
  8. 8. あっさり、あった。 <ul><li>frameworks/base/packages/SystemUI/src/com/android/systemui/recent/ </li></ul>
  9. 9. RecentApps ファイル構成 <ul><li>アプリ一覧 </li></ul><ul><ul><li>Recents VerticalScrollView.java or Horizontal </li></ul></ul><ul><li>アプリ画面 </li></ul><ul><ul><li>RecentsPanelView.java </li></ul></ul>
  10. 10. RecentsPanelView <ul><li>アプリ 1 つの描画を担当 </li></ul><ul><ul><li>画面を構成するコンポーネント (SystemUI) </li></ul></ul><ul><li>サムネイル描画 </li></ul>RecentsPanelView#updateThumbnail private void updateThumbnail ( ViewHolder h, Bitmap thumbnail , boolean show, boolean anim )
  11. 11. サムネイル取得先 <ul><li>RecentsPanelView#getView 内 </li></ul><ul><li>// index is reverse since most recent appears at the bottom... </li></ul><ul><li>final int index = mRecentTaskDescriptions . size () - position - 1; </li></ul><ul><li>final TaskDescription td = mRecentTaskDescriptions . get ( index ); </li></ul><ul><li>updateThumbnail ( holder , td . getThumbnail (), true , false ); </li></ul>RecentsPanelView TaskDescription
  12. 12. ということは・・・ <ul><li>RecentsPanelView を拡張して、 </li></ul><ul><ul><li>getThumbnail で正規サムネイル取得 </li></ul></ul><ul><ul><li>Bitmap 画像に手を加える </li></ul></ul>
  13. 13. せっかくなのでサムネイル設定 <ul><li>設定者がいるはず </li></ul>RecentsPanelView TaskDescription ??? TaskDescription# setThumbnail() TaskDescription TaskDescription# getThumbnail() RecentTasksLoader
  14. 14. ActivityManager <ul><li>RecentTasks の List の取得先 </li></ul><ul><li>Recent として覚える最大タスク数は 20 </li></ul>RecentTasksLoader ActivityManager
  15. 15. サムネイルを覚えるタイミング <ul><li>ActivityManager の内部処理は Native </li></ul><ul><li>サムネイル設定: activityStopped </li></ul><ul><ul><li>Memo: サムネイル生成は ActivityThread# createThumbnailBitmap </li></ul></ul>activityStopped ( IBinder token , Bundle state , Bitmap thumbnail , CharSequence description ) throws RemoteException ;
  16. 16. サムネイル保存 <ul><li>ライフサイクルの onPause </li></ul>Activity ActivityThread ActivityManager LocalActivityManager 経由 シングルトン
  17. 17. まとめ <ul><li>アプリ管理画面(タスク管理) </li></ul><ul><ul><li>SystemUI/Recent が担当 </li></ul></ul><ul><li>サムネイル表示を変える </li></ul><ul><ul><li>RecentsPanelView あたりを拡張が手軽 </li></ul></ul><ul><li>サムネイル生成 </li></ul><ul><ul><li>Activity のライフサイクル onPause </li></ul></ul><ul><li>メモ: Recent を使って管理画面を表示してるのは SystemUI.apk </li></ul>

×