จะหยุดโปรแกรมที่ทำงานภายใต้ Eclipse ได้อย่างไร?


107

ฉันไม่พบตัวเลือกในการหยุดโปรแกรมที่กำลังทำงานอยู่ (ไม่ว่าจะอยู่ในโหมดดีบักหรือรีลีส)

ตอนนี้ฉันหยุดโปรแกรม (คืนการควบคุมไปที่ Eclipse) เพียงแค่ปิดโปรแกรมจำลอง

มีวิธีที่ดีกว่านี้หรือไม่? เช่นนั้นฉันไม่จำเป็นต้องปิด (และรีสตาร์ท) โปรแกรมจำลอง?

คำตอบ:


112

ฉันเข้าใจว่าคุณต้องการหยุดแอปของคุณบนโปรแกรมจำลอง สำหรับสิ่งนี้คุณสามารถเปิดหน้าต่างอุปกรณ์ (ในมุมมองการดีบัก) เลือกกระบวนการจากนั้นกดปุ่มหยุดบนหน้าต่างเดียวกัน


1
ขอบคุณมาก. คุณช่วยชีวิตฉัน. ฉันจะรับคำตอบของคุณใน 7 นาที ... :)
Android Eve

1
การเพิ่มวิธีอื่นที่ฉันเพิ่งค้นพบ: ในโปรแกรมจำลองให้เลือกการตั้งค่า> แอปพลิเคชัน> จัดการแอปพลิเคชัน> (เลือกแอป)> บังคับให้หยุด
Android Eve

ยะ. นั่นเป็นอีกวิธีหนึ่ง แต่ต้องใช้เวลาในการไปถึงที่นั่นเว้นแต่คุณจะมีสิ่งนั้นอยู่เบื้องหลัง :)
Varun

11
ปุ่มหยุดเหมือนใน Visual Studio จะดีมาก ฮึ.
Ian Davis

เพิ่งเริ่มแอปทันทีหลังจากสร้างโปรเจ็กต์และเมื่อคลิกปุ่มหยุดมันไม่ได้ฆ่ากระบวนการ แต่ยิงRemoteException sending setActive(false) notificationในวิวพอร์ต
logCat

77

ผู้ที่พบว่าการสลับระหว่างมุมมองที่น่าเบื่อเพื่อหยุดโปรแกรม (เช่นเดียวกับฉัน) คุณสามารถดูหน้าต่างอุปกรณ์ในมุมมองปัจจุบันของคุณได้โดยเลือก

Windows > แสดงมุมมอง > อื่น ๆ ... > Android > อุปกรณ์


3
ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา! +1
Sabobin

+1. เยี่ยมมาก! และถ้าฉันต้องการให้มันทำงานอีกครั้งฉันก็แค่เริ่มจากอุปกรณ์อีกครั้งและมันก็ทำงานได้อย่างสมบูรณ์แบบ
Francisco Corrales Morales

อีกขั้นตอนเดียวค้นหา packageID ของคุณในรายการ ตอนแรกฉันก็ถูกเลื่อนออกไป แต่แล้วฉันก็แบบว่า "โอ้เจ๋ง! ฉันมองเห็นทุกอย่าง" ยินดีที่ได้เห็นว่า Android มีอะไรอยู่ภายใต้ประทุน (หมายเหตุ: ฉันใช้โปรแกรมจำลอง Genymotion บางทีอีมูเลเตอร์อาจเป็นอย่างที่คุณพูดฉันไม่สามารถยืนรอให้มันทำงานได้)
Stephen J

สิ่งนี้ละเมิดวงจรชีวิตของแอป Android และอาจนำไปสู่การออกที่ไม่ได้มาตรฐานส่งผลให้ไม่สามารถรีสตาร์ทแอปและบังคับให้รีบูตอุปกรณ์เพื่อแก้ไขปัญหา
Dominic Cerisano

13

โปรดทราบว่าใน Android โดยทั่วไปโปรแกรมจะ "หยุด" ก็ต่อเมื่อคุณทำเสร็จ () หรือระบบทำลายเมื่อจำเป็นต้องใช้หน่วยความจำ ทำไมหยุดเลย? คุณไม่จำเป็นต้องหยุดเพื่อแก้ไข / ติดตั้งใหม่ / ทดสอบใหม่ตัวอย่างเช่น


นี่เป็นข้อมูลเชิงลึกที่ยอดเยี่ยม ขอบคุณ. +1
Android Eve

1
@ เอ๊ย.. ด้วยความยินดี. สำหรับรายละเอียดเกี่ยวกับเลือดตรวจสอบstackoverflow.com/questions/2033914/…
DJC

4
ดีบางที แต่นี่ไม่ได้ตอบคำถามจริงๆ ในกรณีของฉันฉันกำลังเล่นกับคลาส AudioTrack และสร้างกระแสของเสียง มันน่ารำคาญมากที่ต้องฟังคลื่นไซน์ตลอดเวลา ฉันต้องไปที่ DDMS ไล่ตามเธรดที่ถูกต้องเลือกจากนั้นค้นหาไอคอน STOP ง่อยมาก.
Vagrant

2
คุณจะรีเซ็ตสถานะของโปรแกรมโดยไม่หยุดได้อย่างไร
Erik Engheim

ฉันสังเกตเห็นด้วย Emulator มันจะไม่เรียกใช้โปรแกรมของคุณอีกจนกว่าจะผ่านไปสองสามนาที (อาจเป็นเพราะมันยังทำงานอยู่) มีประโยชน์ในการดำเนินการให้เสร็จก่อนหน้านี้เมื่อคุณต้องการแก้ไขเล็กน้อยจากนั้นตรวจสอบอย่างรวดเร็วในโปรแกรมจำลอง และบ่อยครั้งที่คุณทำการแก้ไขเล็ก ๆ น้อย ๆ หลายครั้งดังนั้นการหยุดแอปที่กำลังทำงานอยู่และโหลดซ้ำเพื่อตรวจสอบจะช่วยประหยัดเวลาได้มาก
Azurespot

12

ในมุมมอง "Debug" ให้เลือกรูทของแอปพลิเคชันภายใต้ "Debug" (ซึ่งเป็นรายการของเธรดที่ใช้งานอยู่) แล้วคลิกปุ่มหยุด


ขอบคุณเช่นกัน. ฉันเข้าใจคำแนะนำของคุณหลังจากอ่าน @ varun แล้วเท่านั้น +1
Android Eve

@Android Eve อ่าฉันดีใจที่ช่วยได้ ขออภัยมันไม่ชัดเจนพอ!
Chris Thompson

ไม่เป็นไร. ฉันสับสนโดยสิ้นเชิงเกี่ยวกับการพัฒนา Android แม้ว่า (และอาจเป็นเพราะ) การพัฒนาหลายปีบนแพลตฟอร์มอื่น ๆ
Android Eve

ใช่นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุด (อันที่จริงน่าจะเป็นคำตอบที่ยอมรับได้) ปุ่มหยุดจะปิดใช้งานเฉพาะเมื่อเธรดถูกไฮไลต์แทนรายการ [แอปพลิเคชัน Android] ด้านบน
Colin

7

ทำงานให้ฉัน

Windows -> มุมมองแบบเปิด -> อื่น ๆ ... -> DDMS

  1. ในมุมมอง Android บนหน้าต่างด้านซ้ายคุณจะเห็น "อุปกรณ์" ควรมีรายการแอพพลิเคชั่นที่กำลังทำงานอยู่ (โปรแกรมจำลองหรืออุปกรณ์จริง) คลิกที่แอปพลิเคชันที่คุณต้องการปิด โดยปกติชื่อจะเป็นชื่อแพ็กเกจ + ชื่อแอปพลิเคชัน
  2. ตอนนี้คลิกที่สัญลักษณ์ "หยุด"

ในการกลับมาที่มุมมองปกติคุณเพียงแค่กดปุ่ม Java ที่ด้านขวาบน คุณสามารถทำได้โดยกด: Windows -> Open perspective -> Other ... -> Java


2

คำตอบนี้ไม่ได้เกี่ยวข้องกับ Eclipse แต่เนื่องจากคำถามนี้เกิดขึ้นในการค้นหาโดย Google เกี่ยวกับการหยุดโปรแกรม Android ที่ใช้งานอยู่ฉันจึงขอเสนอวิธีการบรรทัดคำสั่ง เรียกใช้adb shellค้นหา PID ของกระบวนการที่คุณต้องการฆ่าด้วยpsเช่นของฉันคือ:

u0_a46 2097 37 175520 19912 ffffffff 40037ebc S net.unternet.bleah.blarg

จากนั้นkill 2097คุณก็จะเห็นหน้าจอหลักปรากฏขึ้นอีกครั้ง


การละเมิดวงจรชีวิตของแอป อาจทำให้เกิดปัญหากับการไม่ปล่อยทรัพยากรระบบและบังคับให้รีบูตอุปกรณ์เพื่อล้างข้อมูล
Dominic Cerisano

0

เพิ่มเบรกพอยต์ลงในโค้ดของคุณที่คุณต้องการหยุดแล้วเรียกใช้ในโหมดดีบักโดยกด F11


0

Android Zombies รูปที่ 1 - ซอมบี้จำนวนมากถูกฆ่าในระหว่างการวิจัยคำตอบนี้

ไม่แนะนำให้ฆ่ากระบวนการ Java VM ของแอปพลิเคชัน Android ที่ระดับ OS น่าเสียดายที่นี่คือสิ่งที่หน้าต่างอุปกรณ์ eclipse "หยุด" ทำเช่นเดียวกับ System.exit () และคำสั่งเชลล์ "kill"

สิ่งนี้จะล้มล้างวิธีการวงจรชีวิตปกติของแอปเช่น onStop (), onDestroy () และ finalize ()

แอพจำนวนมากต้องการวิธีการเหล่านี้เพื่อการออกอย่างสง่างาม (เช่นหากพวกเขาใช้ออบเจ็กต์ของระบบเช่น Sensor, MediaPlayer, Equalizer, Visualizer ฯลฯ )

อ็อบเจ็กต์ระบบเหล่านี้แขวนอยู่กับที่จับความตายของซอมบี้บนทรัพยากรระบบหาก release () ไม่ได้ถูกเรียกอย่างชัดเจนในระหว่างวิธีวงจรชีวิตเหล่านี้ ดูรูปที่ 1 ข้างต้น วิธีนี้สามารถป้องกันไม่ให้แอปรีสตาร์ทและยังต้องรีบูต นั่นคือแง่มุมที่ไม่น่ายกย่อง

ทางออกเดียวคือตรวจสอบให้แน่ใจว่าคุณออกจากแอปของคุณอย่างหมดจดด้วยการโทรไปที่ onStop () หรือ onDestroy () หรืออย่างน้อยก็จบ () ดีบักเกอร์ทำเช่นเดียวกับระบบปฏิบัติการเมื่อปิดระบบ

คุณสามารถตั้งค่าแอปของคุณให้ดักจับเหตุการณ์ SIG_HUP เพื่อบังคับให้ออกจากบรรทัดคำสั่งอย่างสง่างาม

ครั้งเดียวที่คุณจะฆ่าแอป VM อยู่ในสถานะ ANR (เป็นซอมบี้แล้ว) ANR ต้องได้รับการแก้ไข อย่าปรับใช้แอปที่สามารถเข้าสู่สถานะนี้ เป็นเรื่องที่หยาบคายอย่างยิ่ง

คุณสามารถใช้ Google Analytics และ Play Store เพื่อตรวจสอบสิ่งเหล่านี้ในการทำให้ใช้งานได้ คุณไม่ต้องการให้ผู้ใช้โกรธให้รีวิว ANR ระดับดาวเดียวหลังจากที่ต้องรีบูตเนื่องจากแอปพลิเคชันซอมบี้ของคุณ ที่เลวร้ายมาก.

โปรดจำไว้ว่า Android คือ Linux: ให้ปฏิบัติเหมือนระบบปฏิบัติการจริงและเคารพวงจรชีวิตของแอปมิฉะนั้นคุณจะต้องเผชิญกับ Zombie Apocalypse ที่น่าสะพรึงกลัว

PS: ถ้าคุณไม่ชอบการเปรียบเทียบซอมบี้แล้วแฟนตาเซียล่ะ?

ใส่คำอธิบายภาพที่นี่


0

ดูภาพ: 1. คลิกที่ DDMS; 2. เลือกแอปปัจจุบัน 3. คลิกที่ "หยุด" ใส่คำอธิบายภาพที่นี่


ฉันทำสิ่งนี้และแอปหยุดการดีบัก แต่มีกรณี: 1- ตัดการเชื่อมต่ออุปกรณ์จาก usb เรียกใช้แอพจากนั้นเมื่อแอพพบข้อผิดพลาดมันปิดและหลังจากนั้นทุกครั้งที่เรียกใช้แบบฟอร์มการดีบักและรอให้สาย usb เชื่อมต่อหรือกดปุ่มย้อนกลับ 2- อุปกรณ์เชื่อมต่อกับ usb และเรียกใช้แอป (Ctrl + f11) จากนั้นแอปจะทำงานโดยอัตโนมัติภายใต้โหมดดีบัก เพื่อแก้ปัญหานี้ฉันได้สร้างโปรเจ็กต์ใหม่และทีละไฟล์ที่คัดลอก / วางไปยังโปรเจ็กต์ใหม่ แต่สิ่งเดียวกันก็เกิดขึ้นอีกครั้ง ตอนนี้มีความช่วยเหลือไหม
Ahmad Ebrahimi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.