Lihat tumpukan aktivitas Tugas

140

Saya baru mulai mengembangkan aplikasi Android sederhana saat saya masih mempelajari platformnya.

Saya menggunakan Eclipse IDE dengan plugin ADT 0.9.6.

Saya perlu tahu apakah mungkin untuk melihat Activitytumpukan yang terkait dengan Tugas?

Apakah ada cara melalui alat DDMS atau melalui teknik lain?

Pada dasarnya apa yang saya butuhkan adalah dapat melihat aktivitas tumpukan tugas untuk memastikan bahwa aplikasi berperilaku seperti yang diharapkan.

Saya tahu bahwa dimungkinkan untuk mengontrol perilaku tugas dalam beberapa hal melalui penggunaan bendera di Intentobjek dan melalui beberapa atribut <activity>elemen.

Namun alangkah baiknya memiliki semacam alat - terutama dalam mode debug atau lebih - yang akan memungkinkan pengembang untuk melihat Activitytumpukan secara langsung.

Mikrofon
sumber
Jika Anda menggunakan Android Studio, saya telah memposting solusi [di sini] [1]. [1]: stackoverflow.com/a/22392616/1798991
Nebu

Jawaban:

165

Dari baris perintah, Anda dapat menggunakan: adb shell dumpsys activity

Ini meminta pengelola aktivitas untuk mencetak dump dari keadaannya saat ini. Bagian pertama adalah riwayat aktivitas lengkap, yang diatur menurut tugas. Ada juga banyak barang yang dicetak setelah itu, jadi Anda mungkin perlu menggulir sedikit ke atas untuk menemukan apa yang Anda inginkan.

Berikut adalah contoh keluarannya (konten persisnya berbeda-beda di setiap versi platform), yang menunjukkan tugas teratas adalah kontak dengan dua aktivitas, dan di belakang itu peluncur dengan satu aktivitas:

Aktivitas di Status Manajer Aktivitas Saat Ini:
  * TaskRecord {44d07218 # 4 Sebuah android.task.contacts}
    clearOnBackground = true numActivities = 2 rootWasReset = true
    affinity = android.task.contacts
    maksud = {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10600000 cmp = com.android.contacts / .DialtactsActivity bnds = [125.640] [235.758]}
    origActivity = com.android.contacts / .DialtactsContactsEntryActivity
    realActivity = com.android.contacts / .DialtactsActivity
    lastActiveTime = 288203177 (tidak aktif selama 14 d)
    * Hist # 8: HistoryRecord {44b87a30 com.android.contacts / .ViewContactActivity}
        packageName = com.android.contacts processName = android.process.acore
        LaunchFromUid = 10004 app = ProcessRecord {44c4f348 1168: android.process.acore / 10004}
        Maksud {act = android.intent.action.VIEW dat = content: //com.android.contacts/contacts/lookup/144i148.144i461a29500afc8eeb/1927 cmp = com.android.contacts / .ViewContactActivity}
        frontOfTask = false task = TaskRecord {44d07218 # 4 Android.task.contacts}
        taskAffinity = android.task.contacts
        realActivity = com.android.contacts / .ViewContactActivity
        base = / system / app / Contacts.apk / system / app / Contacts.apk data = / data / data / com.android.contacts
        labelRes = 0x7f090012 icon = 0x7f02006b theme = 0x7f0e0004
        stateNotNeeded = false componentSpecified = false isHomeActivity = false
        konfigurasi = {skala = 1.0 imsi = 310/4 loc = en_US sentuh = 3 kunci = 2/1/2 nav = 2/2 orien = 1 tata letak = 34}
        resultTo = HistoryRecord {44d174d0 com.android.contacts / .DialtactsContactsEntryActivity} resultWho = favorit resultCode = 2
        launchFailed = false hasState = false icicle = null
        state = RESUMED stop = false delayResume = false finishing = false
        keysPaused = false inHistory = true persistent = false launchMode = 0
        fullscreen = true visible = true frozenBeforeDestroy = false thumbnailNeeded = false idle = true
        waitingVisible = false nowVisible = true
    * Hist # 7: HistoryRecord {44d174d0 com.android.contacts / .DialtactsContactsEntryActivity}
        packageName = com.android.contacts processName = android.process.acore
        LaunchFromUid = 10004 app = ProcessRecord {44c4f348 1168: android.process.acore / 10004}
        Maksud {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] flg = 0x10200000 cmp = com.android.contacts / .DialtactsContactsEntryActivity bnds = [125.640] [235.758]}
        frontOfTask = true task = TaskRecord {44d07218 # 4 Android.task.contacts}
        taskAffinity = android.task.contacts
        realActivity = com.android.contacts / .DialtactsActivity
        base = / system / app / Contacts.apk / system / app / Contacts.apk data = / data / data / com.android.contacts
        labelRes = 0x7f090007 icon = 0x7f02006b theme = 0x7f0e0000
        stateNotNeeded = false componentSpecified = true isHomeActivity = false
        konfigurasi = {skala = 1.0 imsi = 310/4 loc = en_US sentuh = 3 kunci = 2/1/2 nav = 2/2 orien = 1 tata letak = 34}
        launchFailed = false hasState = true icicle = Paket [mParcelledData.dataSize = 4196]
        state = STOPPED stop = true delayResume = false finishing = false
        keysPaused = false inHistory = true persistent = false launchMode = 2
        fullscreen = true visible = false frozenBeforeDestroy = false thumbnailNeeded = false idle = true
  * TaskRecord {44c4ee90 # 2 A com.android.launcher}
    clearOnBackground = true numActivities = 1 rootWasReset = true
    affinity = com.android.launcher
    maksud = {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10600000 cmp = com.android.launcher / .Launcher}
    realActivity = com.android.launcher / .Launcher
    lastActiveTime = 214734838 (tidak aktif selama 73483 d)
    * Hist # 6: HistoryRecord {44c4d988 com.android.launcher / .Launcher}
        packageName = com.android.launcher processName = android.process.acore
        LaunchFromUid = 0 app = ProcessRecord {44c4f348 1168: android.process.acore / 10004}
        Maksud {act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10000000 cmp = com.android.launcher / .Launcher}
        frontOfTask = true task = TaskRecord {44c4ee90 # 2 A com.android.launcher}
        taskAffinity = com.android.launcher
        realActivity = com.android.launcher / .Launcher
        base = / system / app / Launcher.apk / system / app / Launcher.apk data = / data / data / com.android.launcher
        labelRes = 0x7f0a0000 icon = 0x7f020015 tema = 0x103005f
        stateNotNeeded = true componentSpecified = false isHomeActivity = true
        konfigurasi = {skala = 1.0 imsi = 310/4 loc = en_US sentuh = 3 kunci = 2/1/2 nav = 2/2 orien = 1 tata letak = 34}
        launchFailed = false hasState = true icicle = Paket [mParcelledData.dataSize = 5964]
        state = STOPPED stop = true delayResume = false finishing = false
        keysPaused = false inHistory = true persistent = false launchMode = 2
        fullscreen = true visible = false frozenBeforeDestroy = false thumbnailNeeded = false idle = true
hackbod
sumber
adakah cara yang bagus untuk menampilkan semua tugas & tumpukan aktivitas aplikasi saat ini melalui logcat? apakah kita benar-benar perlu mengurai perintah adb?
Pengembang android
87
Selain itu, jika Anda hanya ingin melihat nama aktivitas di tumpukan, Anda dapat melakukan ini: adb shell <enter> dumpsys activity | grep -i run .
Surya Wijaya Madjid
6
Jawaban yang bagus! Saya telah menulis skrip kenyamanan yang memfilter output untuk mendapatkan tugas / aktivitas untuk paket tertentu.
sschuberth
6
Selain itu adb shell dmpsys activityAnda bisa mendapatkan untuk setiap daftar misalnya adb shell dmpsys activity activitiesuntuk ACTIVITY MANAGER ACTIVITIES yang berisi tumpukan utama, aktivitas yang sedang berjalan dan tugas terbaru. dumpsys activity intentsuntuk maksud tertunda; dumpsys activity broadcastsuntuk status siaran; dumpsys activity providersuntuk penyedia konten; dumpsys activity servicesuntuk layanan; dumpsys activity processesuntuk menjalankan proses.
Fredrick Gauss
1
Perintah @ SuryaWijayaMadjid dapat dilakukan dalam satu baris:, adb shell dumpsys activity | grep -i runatau adb shell dumpsys activity activities | grep -i rununtuk keluaran yang sedikit lebih bersih.
vaughandroid
61

Anda dapat menggunakan perintah berikut di baris perintah Anda untuk melihat tugas dan backstack dalam sistem:

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

Atau Anda dapat mencoba TaskLogger , alat sederhana yang saya buat yang dapat memantau semua aktivitas dan tugas di Aplikasi Anda, dan menampilkannya di Logcat secara real-time.

Gerald.K
sumber
+1 .... Saya telah mencoba TaskLogger Anda. Ini adalah alat yang bagus dan banyak membantu saya, tetapi mencetak longsoran log yang tidak diinginkan.
ThinkDeep
34

Saya tahu ini adalah pertanyaan lama, tetapi fungsi ini sekarang dimasukkan ke dalam Android Studio:

tangkapan layar studio android

Kemudian di file teks yang dihasilkan, cari ACTIVITY(huruf besar semua):

Tangkapan layar file teks android studio

tir38
sumber
20
Saya rasa opsi ini tidak lagi ada sejak jendela Android Profiler baru di Android Studio 3.0 menggantikan alat Android Monitor.
Buah
5
Saya membuat masalah untuk fungsi yang hilang ini: Issuetracker.google.com/issues/77944626 jadi harap beri suara untuk itu. Terima kasih
mtrakal
28

Jika Anda ingin memeriksa tumpukan tugas dari paket tertentu, perintah berikut akan dilakukan:

adb shell dumpsys activity activities | grep PACKAGE_NAME | grep Hist
neevek
sumber
12

Saya selalu memeriksa bagian pesan long dump ini ..

  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}

Catatan: Jalankan # 4 adalah aktivitas yang Anda lihat sekarang di layar. :)

cmcromance.dll
sumber
2
Apa itu "pesan long dump"?
Marian Paździoch
2
@ MarianPaździoch "aktivitas adb shell dumpsys" menampilkan pesan terlalu PANJANG. Pesan-pesan ini, di atas, adalah sedikit di antaranya. Ngomong-ngomong, saya mendapat tip bisa menghindari ini. Jalankan ini, "aktivitas aktivitas adb shell dumpsys". Anda bisa melihat pesan yang lebih pendek dan membaca lebih mudah tentang tumpukan aktivitas. :)
cmcromance
1
... dan jika daftar itu masih terlalu panjang, buka daftar Aplikasi Terbaru dan hapus beberapa tugas.
Barry Fruitman
10

Anda dapat menggunakan alat hierarchyviewer.bat. Ini adalah bagian dari Android SDK. Ini hanya bekerja dengan emulator. Tapi itu jauh lebih nyaman dan lebih jelas.

Sunting: Saya baru saja menemukan Hierarchy Viewer dalam Eclipse! Dan itu berfungsi dengan perangkat nyata juga. Buka saja perspektif Windows-> Open Perspective-> Hierarchy View Dalam daftar, Anda dapat melihat semua perangkat dan emulator yang terhubung serta tumpukan aktivitas. Selain itu, di tampilan hierarki, Anda dapat melihat lebih banyak informasi tentang tampilan itu sendiri.

Edit: Hierarchy Viewer hanya akan bekerja dengan perangkat pengembang. Perangkat produksi tidak dapat melakukannya untuk alasan keamanan. Untuk informasi lebih lanjut silakan lihat jawaban berikut

Xazen
sumber
4
Hierarchy Viewer adalah untuk melihat hierarki Tampilan aktivitas. Pertanyaannya adalah tentang tumpukan tugas / aktivitas .
Jeremy Logan
8

Untuk daftar tugas terbaru

adb shell dumpsys activity recents

Untuk daftar Layanan yang sedang berjalan

adb shell dumpsys activity services

Untuk daftar Penyedia Konten saat ini

adb shell dumpsys activity providers

Untuk daftar status Siaran

adb shell dumpsys activity broadcasts

Untuk daftar Maksud Tertunda

adb shell dumpsys activity intents

Untuk daftar izin

adb shell dumpsys activity permissions
Prasad
sumber
Jika Anda menyukai lebih banyak cara GUI-sh, Anda dapat menggunakan AdbCommanderplugin dan menambahkan perintah-perintah itu di macrostab
prot0n
1

Solusi: 'aktivitas dumpsys shell adb' tidak berfungsi dengan TabActivity. Saat setiap item tab dipilih, aktivitas terkait akan diluncurkan. Tetapi ketika menggunakan 'adb shell dumpsys activity', aktivitas 'main' selalu dikembalikan:

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);

    }
}
Pyraman
sumber