DDMSについて
主な機能は以下の通りです。
デバイスごと、デバッグ機能を提供
エミュレータへの着信、電波状態、位置情報制御
スレッドの状態確認
Heap(メモリ)の使用量、使用統計情報
メモリ・アロケーション(メモリ確保)のトラッキング
ファイルエクスプローラ
Devices(デバイス)タブ
USB接続されたAndroid端末、もしくはエミュレータが表示されるタブです。
各端末ごとのプロセス一覧が表示され、デバッグ対象のprocessには緑のBug(虫)マークがついています。
Emulator Control(エミュレータ制御)タブ
エミュレータ制御タブは画像上から順番に次の機能を持っています。
電話状態
音声およびデータ通信について、電波状態と通信情報を変更することができます。
電波状態はunregistered , home , roaming , seratching , denyed が、
速度は Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA の種類があります。
電話着信
任意の電話番号から着信をすることができます。また、Voice|SMSがオプションとして
用意されています。
位置情報
位置情報はその名の通り、GPS情報です。
スレッドタブ
上記デバイスタブからデバッグ対象アプリケーションを選択、「Update Threads」です。
引き続き、スレッドタブのリフレッシュボタンを押せば、スレッド構成が表示されます。
IDやTid、タスクの状況(wait OR runnning)、名前などが一覧表示されます。
- ID - VM に割り当てられたユニークなスレッド ID 。Dalvik では 3 から始まる奇数となる。
- Tid - Linux スレッド ID。プロセスのメインスレッドに対し、これがプロセス ID と一致する。
- Status - VM スレッドのステータス。デーモンスレッドにはアスタリスク (*) が付いて表示される。これは以下のどれかになる。
- running - アプリケーションコードを実行中
- sleeping - Thread.sleep() が呼び出された
- monitor - モニタのロックの獲得を待機中
- wait - Object.wait() にある
- native - ネイティブコードを実行中
- vmwait - VM リソースで待機中
- zombie - スレッドが終了中のプロセスにある
- init - スレッドが初期化中 ( これを見ることはありえない )
- starting - スレッドが開始中 ( これも見ることはありえない )
- utime - ユーザコードの実行に費やした "jiffies" 単位 ( 通常 10ms ) の累積時間。
- stime - システムコードの実行に費やした "jiffies" 単位 ( 通常 10ms ) の累積時間。
- Name - スレッドの名前
Heapタブ
アプリケーションのHeap(メモリ空間)を表示します。
メモリの空きサイズを確認したり、メモリリークを調べたりできます。
デバイスタブからUpdate Heapボタンを押下します。
Heapタブでは、Cause GCボタンを押すとHeap領域の使用状態が表示され、
オブジェクトの使用状況が分かります。Cause GCボタンを押すことで、
一度、GC(ガベージコレクションによる未使用メモリの回収)を行っています。
オブジェクトの使用状況、非効率的な作成箇所がないか、などメモリ使用量の観点から、
性能の向上や不具合対策に使える機能です。
Allocation Tracker
メモリ確保時の挙動を追跡します。動的な履歴としてメソッド呼び出し履歴などログを確認できます。
Start Trackingを押してからStop Trackingのボタンを押すまでの間、メモリの確保(アロケート)タイミングについて追跡します。
Get Allocations を押すと、確保(アロケート)されたオブジェクト一覧がタブの上部に表示されます。
確認したいオブジェクトを選択すると、タブの下部にメモリ・アロケート(確保)に至るメソッド、行番号が表示されます。
頻繁にGCが発生して、パフォーマンスに影響する場合の調査や、
不用意に生成しているオブジェクトの調査、生成タイミングの最適化を行うにはとても便利な機能です。
ファイル・エクスプローラー
ファイル・エクスプローラータブはその名の通り、Andriod端末でのファイル操作を行います。
もちろん、通常のadb同様に、端末へデータをpushしたり、コンピュータにデータをpull したり、
ファイル操作が可能を行えます(要rootまたは、権限があるディレクトリのみ操作が可能です)
androdi関連企業
android関連の企業をまとめる。
・テックファーム株式会社(スマホアプリ/Web開発ならテックファーム株式会社 |)
事例:
・株式会社ブリリアントサービス(コグニザントジャパン | デジタルの活用)
事例:
・株式会社ビーブレイクシステムズ(ビーブレイクシステムズ | ITで経営の今を変える、未来を変える)
事例:
androidの性能評価について
性能評価テスト
【TraceView】
Android SDKには、プロファイリングツールである、TraceViewが付属しています。
ドキュメント(英語)
・使い方
1.プロファイル取得
方法は2種類
a.コードを埋め込んで任意のプロフィールを取得する
---
//プロファイリング開始
Debug.startMethodTracing("<ファイル名>");
//プロファイリング終了
Debug.stopMethodTracing();
---
例:startMethodTracing()をonCreate()コール
stopMethodTracing()をonDestroy()でコール
b.アプリすべてのプロフィールを取得する
Devices(デバイス)タブよりプロセスを設定してStart Method Profile(①)を押下する
※実機の場合、AndroidManifest.xmlに以下を追加しないとアプリが表示されない?
-
- -
-
- -
2.実行しプロファイルをとる。
対象のコードが実行されるようにアプリを実行する。
DDMSのFile Explorerのsdcardフォルダにプロフィールファイル(*.trace)があるのでPCのローカルに保存
3.traceviewを起動する
traceview C:\*.trace
4.TraceViewの説明
上段はTimeline Panel下段は、Profile Panelと呼びます。
Profile Panelの一番下に、Findが用意されているのでメソッド名による検索も可能です。
Incl %
Inclusive時間のトータルタイムからのパーセンテージ
Inclusive
そのメソッドと、そのメソッドから呼ばれたメソッドの実行時間
Excl %
Exclusive時間のトータルタイムからのパーセンテージ
Exclusive
そのメソッドの実行時間
Cals+RecurCalls/Total
このメソッドが何回呼ばれたか/再帰で何回呼ばれたか
Time/Call
メソッドの実行時間(ミリセック)
-
- -
補足:
Android1.6以降の環境でtraceviewを利用する場合は
AndroidManifest.xmlに
androidのライフサイクルについて
(1) onCreate()
(2) onStart()
(3) onRestoreInstanceState()
(4) onResume()
2.実行⇒一時停止
(1) onSaveInstanceState()
(2) onPause()
3.一時停止⇒実行
(1) onResume()
4.一時停止⇒終了
(1) onSaveInstanceState
(2) onStop
5.一時停止⇒破棄済み
(1) Process killed
6.終了⇒実行
(1) onRestart()
(2) onStart()
(3) onResume()
7.終了⇒破棄
(1) onDestroy()
(または、Process killed)
■イベントの内容
onCreate(Bundle)
アクティビティが最初に起動するときに呼び出される。
インターフェイスの作成や、一度しか行わない最初の初期化処理を主に書くことになるとおもいます。
onStart()
アクティビティが表示される直前に呼ばれます。
onResume()
アクティビティがユーザとのやり取りを始められるようになる直前に呼ばれます。
onPause()
アクティビティがバックグラウンドに隠れるときに呼ばれます。
例としては、現在の画面が他の画面を呼んだときなど。
onStop()
アクティビティが隠れた状態で、しばらく使わないかもって場合に呼ばれます。
メモリ残量が少ないと、このイベントは呼ばれないままプロセスが破棄される場合もあるそうです。
onRestart()
終了状態になったアクティビティが再び実行される場合に呼ばれます。
onDestroy()
アクティビティが破棄される直前に呼ばれます。
onSaveInstanceState(Bundle)
アクティビティの状態を保存させるためにこのイベントを呼ぶ。
しかし、デフォルトですべての状態を保存してくれるので、通常は気にしなくてもよい。
onRestoreInstanceState(Bundle)
onSaveInstanceStateによって保存された状態からアクティビティが再初期化される直前に呼び出される。