ฉันไม่พบตัวเลือกในการหยุดโปรแกรมที่กำลังทำงานอยู่ (ไม่ว่าจะอยู่ในโหมดดีบักหรือรีลีส)
ตอนนี้ฉันหยุดโปรแกรม (คืนการควบคุมไปที่ Eclipse) เพียงแค่ปิดโปรแกรมจำลอง
มีวิธีที่ดีกว่านี้หรือไม่? เช่นนั้นฉันไม่จำเป็นต้องปิด (และรีสตาร์ท) โปรแกรมจำลอง?
ฉันไม่พบตัวเลือกในการหยุดโปรแกรมที่กำลังทำงานอยู่ (ไม่ว่าจะอยู่ในโหมดดีบักหรือรีลีส)
ตอนนี้ฉันหยุดโปรแกรม (คืนการควบคุมไปที่ Eclipse) เพียงแค่ปิดโปรแกรมจำลอง
มีวิธีที่ดีกว่านี้หรือไม่? เช่นนั้นฉันไม่จำเป็นต้องปิด (และรีสตาร์ท) โปรแกรมจำลอง?
คำตอบ:
ฉันเข้าใจว่าคุณต้องการหยุดแอปของคุณบนโปรแกรมจำลอง สำหรับสิ่งนี้คุณสามารถเปิดหน้าต่างอุปกรณ์ (ในมุมมองการดีบัก) เลือกกระบวนการจากนั้นกดปุ่มหยุดบนหน้าต่างเดียวกัน
RemoteException sending setActive(false) notification
ในวิวพอร์ต
ผู้ที่พบว่าการสลับระหว่างมุมมองที่น่าเบื่อเพื่อหยุดโปรแกรม (เช่นเดียวกับฉัน) คุณสามารถดูหน้าต่างอุปกรณ์ในมุมมองปัจจุบันของคุณได้โดยเลือก
Windows > แสดงมุมมอง > อื่น ๆ ... > Android > อุปกรณ์
โปรดทราบว่าใน Android โดยทั่วไปโปรแกรมจะ "หยุด" ก็ต่อเมื่อคุณทำเสร็จ () หรือระบบทำลายเมื่อจำเป็นต้องใช้หน่วยความจำ ทำไมหยุดเลย? คุณไม่จำเป็นต้องหยุดเพื่อแก้ไข / ติดตั้งใหม่ / ทดสอบใหม่ตัวอย่างเช่น
ในมุมมอง "Debug" ให้เลือกรูทของแอปพลิเคชันภายใต้ "Debug" (ซึ่งเป็นรายการของเธรดที่ใช้งานอยู่) แล้วคลิกปุ่มหยุด
ทำงานให้ฉัน
Windows -> มุมมองแบบเปิด -> อื่น ๆ ... -> DDMS
ในการกลับมาที่มุมมองปกติคุณเพียงแค่กดปุ่ม Java ที่ด้านขวาบน คุณสามารถทำได้โดยกด: Windows -> Open perspective -> Other ... -> Java
คำตอบนี้ไม่ได้เกี่ยวข้องกับ Eclipse แต่เนื่องจากคำถามนี้เกิดขึ้นในการค้นหาโดย Google เกี่ยวกับการหยุดโปรแกรม Android ที่ใช้งานอยู่ฉันจึงขอเสนอวิธีการบรรทัดคำสั่ง เรียกใช้adb shell
ค้นหา PID ของกระบวนการที่คุณต้องการฆ่าด้วยps
เช่นของฉันคือ:
u0_a46 2097 37 175520 19912 ffffffff 40037ebc S net.unternet.bleah.blarg
จากนั้นkill 2097
คุณก็จะเห็นหน้าจอหลักปรากฏขึ้นอีกครั้ง
เพิ่มเบรกพอยต์ลงในโค้ดของคุณที่คุณต้องการหยุดแล้วเรียกใช้ในโหมดดีบักโดยกด F11
รูปที่ 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: ถ้าคุณไม่ชอบการเปรียบเทียบซอมบี้แล้วแฟนตาเซียล่ะ?
ดูภาพ: 1. คลิกที่ DDMS; 2. เลือกแอปปัจจุบัน 3. คลิกที่ "หยุด"