まだプラットフォームを学んでいる間に、単純なAndroidアプリケーションの開発を始めました。
Eclipse IDEをADTプラグイン0.9.6で使用しています。
タスクに関連付けられているActivity
スタックを表示できるかどうかを知る必要がありますか?
DDMSツールまたは他の手法を使用する方法はありますか?
基本的に、タスクのスタックアクティビティを確認して、アプリケーションが期待どおりに動作することを確認する必要があります。
Intent
オブジェクトのフラグと<activity>
要素の属性を使用することで、ある程度タスクの動作を制御できることを知っています。
ただし、特にデバッグモードなどで、開発者がActivity
スタックを簡単に見ることができるようなツールがあればいいと思います。
コマンドラインで次のコマンドを使用して、システム内のタスクとバックスタックを表示できます。
adb Shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'
または、 TaskLogger を試すことができます。これは、アプリ内のすべてのアクティビティとタスクを監視し、それらをLogcatにリアルタイムで出力できる、私が作成したシンプルなツールです。
特定のパッケージのタスクスタックを検査する場合は、次のコマンドを実行します。
adb Shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
ロングダンプメッセージのこの部分を常にチェックします。
Running activities (most recent first):
TaskRecord{4307f828 #56 A com.demo.proj U 0}
Run #4: ActivityRecord{425a6838 com.demo.proj/com.demo.proj.Activity2}
Run #3: ActivityRecord{427dc860 com.demo.proj/com.demo.proj.Activity1}
Run #2: ActivityRecord{420cba18 com.demo.proj/com.demo.proj.MainActivity}
TaskRecord{430341d0 #2 A com.lge.launcher2 U 0}
Run #1: ActivityRecord{41e0af68 com.lge.launcher2/.Launcher}
TaskRecord{44e26ce0 #18 A com.lge.appbox.client U 0}
Run #0: ActivityRecord{41e9dbe8 com.lge.appbox.client/.AppBoxClient}
注:実行#4は、画面に表示されるアクティビティです。:)
ツールhierarchyviewer.batを使用できます。これはAndroid SDKの一部です。ただし、エミュレータでのみ機能します。しかし、それははるかに快適で明確です。
編集:Eclipse内で階層ビューアーを見つけました!また、実際のデバイスでも機能します。パースペクティブウィンドウを開く->パースペクティブを開く->階層ビューリストには、接続されているすべてのデバイスとエミュレーター、およびアクティビティスタックが表示されます。また、ツリービューでは、ビュー自体に関するより多くの情報を確認できます。
編集:階層ビューアーは開発者のデバイスでのみ動作します。本番デバイスは、セキュリティ上の理由でそれを行うことはできません。詳細については、 次の回答 をご覧ください。
最近のタスクのリストについて
adb Shell dumpsys activity recents
実行中のサービスのリストについて
adb Shell dumpsys activity services
現在のコンテンツプロバイダーのリスト
adb Shell dumpsys activity providers
ブロードキャスト状態のリストについて
adb Shell dumpsys activity broadcasts
保留中のインテントのリストについて
adb Shell dumpsys activity intents
権限のリストについて
adb Shell dumpsys activity permissions
解決策: 'adb Shell dumpsys activity'はTabActivityで機能しません。各タブ項目を選択すると、対応するアクティビティが起動します。ただし、「adb Shell dumpsys activity」を使用すると、常に「main」アクティビティが返されます。
public class main extends TabActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
Log.e("xyz", "start main...............");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources(); // Resource object to get Drawables
TabHost tabHost = getTabHost(); // The activity TabHost
TabHost.TabSpec spec; // Resusable TabSpec for each tab
Intent intent; // Reusable Intent for each tab
// Create an Intent to launch an Activity for the tab (to be reused)
intent = new Intent().setClass(this, widgets.class);
spec = tabHost.newTabSpec("Widgets").setIndicator("Widgets", res.getDrawable(R.drawable.tab1)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, layouts.class);
spec = tabHost.newTabSpec("Layouts").setIndicator("Layouts",res.getDrawable(R.drawable.tab2)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, composite1.class);
spec = tabHost.newTabSpec("Composite").setIndicator("Composite",res.getDrawable(R.drawable.tab3)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, imageMedia.class);
spec = tabHost.newTabSpec("Image_Media").setIndicator("Image&Media",res.getDrawable(R.drawable.tab4)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, timeDate.class);
spec = tabHost.newTabSpec("Time_Date").setIndicator("Time&Date",res.getDrawable(R.drawable.tab5)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, transitions.class);
spec = tabHost.newTabSpec("Transitions").setIndicator("Transitions",res.getDrawable(R.drawable.tab6)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, advanced.class);
spec = tabHost.newTabSpec("Advanced").setIndicator("Advanced",res.getDrawable(R.drawable.tab7)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, others.class);
spec = tabHost.newTabSpec("Others").setIndicator("Others",res.getDrawable(R.drawable.tab8)).setContent(intent);
tabHost.addTab(spec);
intent = new Intent().setClass(this, Dynamic.class);
spec = tabHost.newTabSpec("Dynamic").setIndicator("Dynamic",res.getDrawable(R.drawable.tab2)).setContent(intent);
tabHost.addTab(spec);
tabHost.setCurrentTab(0);
}
}