web-dev-qa-db-ja.com

タスクのアクティビティスタックを表示する

まだプラットフォームを学んでいる間に、単純なAndroidアプリケーションの開発を始めました。

Eclipse IDEをADTプラグイン0.9.6で使用しています。

タスクに関連付けられているActivityスタックを表示できるかどうかを知る必要がありますか?

DDMSツールまたは他の手法を使用する方法はありますか?

基本的に、タスクのスタックアクティビティを確認して、アプリケーションが期待どおりに動作することを確認する必要があります。

Intentオブジェクトのフラグと<activity>要素の属性を使用することで、ある程度タスクの動作を制御できることを知っています。

ただし、特にデバッグモードなどで、開発者がActivityスタックを簡単に見ることができるようなツールがあればいいと思います。

131
Mic

コマンドラインで次のコマンドを使用して、システム内のタスクとバックスタックを表示できます。

adb Shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'

または、 TaskLogger を試すことができます。これは、アプリ内のすべてのアクティビティとタスクを監視し、それらをLogcatにリアルタイムで出力できる、私が作成したシンプルなツールです。

52
Gerald.K

これは古い質問ですが、この機能はAndroid St​​udioに組み込まれています。

Android studio screenshot

次に、結果のテキストファイルで、ACTIVITY(すべて大文字)を検索します。

Android studio text file screenshot

28
tir38

特定のパッケージのタスクスタックを検査する場合は、次のコマンドを実行します。

adb Shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
23
neevek

ロングダンプメッセージのこの部分を常にチェックします。

  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は、画面に表示されるアクティビティです。:)

12
cmcromance

ツールhierarchyviewer.batを使用できます。これはAndroid SDKの一部です。ただし、エミュレータでのみ機能します。しかし、それははるかに快適で明確です。

編集:Eclipse内で階層ビューアーを見つけました!また、実際のデバイスでも機能します。パースペクティブウィンドウを開く->パースペクティブを開く->階層ビューリストには、接続されているすべてのデバイスとエミュレーター、およびアクティビティスタックが表示されます。また、ツリービューでは、ビュー自体に関するより多くの情報を確認できます。

編集:階層ビューアーは開発者のデバイスでのみ動作します。本番デバイスは、セキュリティ上の理由でそれを行うことはできません。詳細については、 次の回答 をご覧ください。

10
Xazen

最近のタスクのリストについて

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
6
Prasad

解決策: '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);

    }
}
1
Pyraman