ग्रहण के तहत चल रहे एक कार्यक्रम को कैसे रोकें?


107

मुझे रनिंग प्रोग्राम को रोकने का विकल्प नहीं मिल सकता है (चाहे डिबग या रिलीज़ मोड में)।

इसलिए अब, मैं एमुलेटर को बंद करके प्रोग्राम (एक्लिप्स पर नियंत्रण लौटाता हूं) को रोक देता हूं।

क्या ऐसा करने का कोई बेहतर तरीका है? ऐसे कि मुझे एमुलेटर को बंद (और पुनः आरंभ) करने की आवश्यकता नहीं है?

जवाबों:


112

मैं समझता हूं कि आप एमुलेटर पर अपना ऐप बंद करना चाहते हैं। इसके लिए आप डिवाइस विंडो (डिबग परिप्रेक्ष्य में) खोल सकते हैं, प्रक्रिया का चयन करें और फिर उसी विंडो पर स्टॉप बटन दबाएं।


1
बहुत बहुत धन्यवाद। तुमने मेरी जान बचाई। मैं 7 मिनट में आपके उत्तर को स्वीकार करूंगा ... :)
एंड्रॉइड ईव

1
एक और तरीका जो मैंने अभी खोजा है: एमुलेटर में सेटिंग> एप्लिकेशन> एप्लिकेशन प्रबंधित करें> (ऐप चुनें)> फोर्स स्टॉप चुनें।
एंड्रॉयड ईव

हां। यह एक और तरीका है, लेकिन वहां तक ​​पहुंचने में समय लगता है, जब तक कि पृष्ठभूमि में यू न हो। :)
वरुण

11
दृश्य स्टूडियो में एक स्टॉप बटन ओह इतना अच्छा होगा। ओह।
इयान डेविस

प्रोजेक्ट निर्माण के ठीक बाद ऐप शुरू किया और जब स्टॉप बटन पर क्लिक किया तो यह प्रक्रिया को नहीं मार पाया लेकिन लॉगकट व्यूपोर्टRemoteException sending setActive(false) notification में एक फायर कर दिया
स्टीफन

77

जिन लोगों को यह प्रोग्राम रोकने के लिए दृष्टिकोण के बीच थकाऊ स्विचिंग लगता है (जैसे मैंने किया था), आप अपने वर्तमान परिप्रेक्ष्य में चयन करके डिवाइस विंडो को अपने वर्तमान परिप्रेक्ष्य में देख सकते हैं

विंडोज > शो व्यू > अन्य ... > एंड्रॉइड > डिवाइस


3
धन्यवाद, यह वही है जो मैं देख रहा था! +1
सबोबिन

+1। महान! और अगर मैं चाहता हूं कि इसे फिर से चलाया जाए, तो मैं इसे फिर से डिवाइस से शुरू करता हूं, और यह सही काम करता है।
फ्रांसिस्को कॉर्लेस मोरेल

एक और कदम, सूची पर अपना पैकेजआईडी खोजें। सबसे पहले मुझे उसके द्वारा लगाया गया था, लेकिन तब मैं "ओह कूल! मैं सब कुछ देख सकता था।" यह देखने के लिए अच्छा है कि एंड्रॉइड के अपने हुड के नीचे क्या है (ध्यान दें: मैं Genymotion सिम्युलेटर का उपयोग कर रहा हूं, शायद एमुलेटर वही है जो आप कहते हैं, मैं इसे चलाने के लिए इंतजार नहीं कर सकता)
स्टीफन जे

यह एंड्रॉइड ऐप जीवनचक्र का उल्लंघन करता है और इस कारण समस्या को दूर करने के लिए एप्लिकेशन को पुनरारंभ करने में असमर्थता और डिवाइस रिबूट को मजबूर करने के परिणामस्वरूप असंगत निकास हो सकता है।
डोमिनिक सेरिसानो

13

ध्यान रखें कि एंड्रॉइड पर, प्रोग्राम आमतौर पर केवल 'बंद' करते हैं यदि आप समाप्त करते हैं () या सिस्टम स्मृति को आवश्यक होने पर उन्हें नष्ट कर देता है। आखिर रुक क्यों गए? उदाहरण के लिए आपको फिक्स / री-इंस्टॉल / री-टेस्ट करने के लिए रुकने की जरूरत नहीं है।


यह एक महान अंतर्दृष्टि है। धन्यवाद। +1
एंड्रॉइड ईव

1
@ ईवे .. मेरी खुशी। Gory विवरण के लिए, stackoverflow.com/questions/2033914/…
DJC

4
शायद हो सकता है। लेकिन यह वास्तव में इस सवाल का जवाब नहीं है। मेरे मामले में, मैं ऑडियोट्रैक क्लास के साथ खेल रहा हूं और ध्वनियों की एक धारा उत्पन्न कर रहा हूं। यह हर समय उस लहर को सुनने के लिए वास्तव में परेशान हो जाता है। मुझे डीडीएमएस पर जाना है, दाहिने धागे का शिकार करना है, इसे चुनें, फिर STOP आइकन ढूंढें। बहुत लंगड़ा।
वग्रांत

2
आप बिना रुके अपने प्रोग्राम की स्थिति को कैसे रीसेट कर सकते हैं?
एरिक इंगहेम

मैंने एमुलेटर के साथ देखा, यह आपके प्रोग्राम को कुछ मिनटों के बाद फिर से नहीं चलाएगा (शायद इसलिए कि यह अभी भी चल रहा है)। यह पहले खत्म करने के लिए काम में आता है, जब आपको एक छोटा सा संपादन करने की आवश्यकता होती है, तो जल्दी से इसे एमुलेटर में जांचें। और अक्सर, आप कई छोटे संपादन कर रहे हैं, इसलिए चल रहे ऐप को बंद करने और जल्दी से जांचने के लिए इसे पुनः लोड करने में सक्षम होने से बहुत समय बचता है।
अज़र्सपॉट

12

"डीबग" परिप्रेक्ष्य में, "डीबग" (जहां सक्रिय थ्रेड्स की लिस्टिंग है) के तहत आवेदन की जड़ का चयन करें और स्टॉप बटन पर क्लिक करें।


आपको भी धन्यवाद। मैंने @ वरुण के पढ़ने के बाद ही आपके निर्देशों को समझा। +1
एंड्रॉइड ईव

@Android ईव, आह, अच्छी तरह से मुझे खुशी है कि यह मदद की है। खेद है कि यह पर्याप्त स्पष्ट नहीं था!
क्रिस थॉम्पसन

ठीक है। मैं कई अन्य प्लेटफार्मों पर कई वर्षों के विकास के बावजूद (और शायद इसलिए) Android विकास के संबंध में पूरी तरह से भटका हुआ हूं।
एंड्रॉइड ईव

हां, यह अब तक का सबसे आसान उपाय है। (वास्तव में, संभावित रूप से स्वीकृत उत्तर होना चाहिए)। स्टॉप बटन केवल तभी अक्षम होता है जब शीर्ष [Android एप्लिकेशन] प्रविष्टि के बजाय एक थ्रेड हाइलाइट किया जाता है।
कॉलिन

7

मेरे लिए काम कर रहा है।

विंडोज -> खुला परिप्रेक्ष्य -> ​​अन्य ... -> डीडीएमएस

  1. एंड्रॉइड दृश्य में, बाईं खिड़कियों पर, आप "डिवाइस" देख सकते हैं। उन अनुप्रयोगों की एक सूची होनी चाहिए जो अब चल रहे हैं (एमुलेटर या भौतिक उपकरण)। उस एप्लिकेशन पर क्लिक करें जिसे आप बंद करना चाहते हैं। आम तौर पर नाम पैकेज + आवेदन के नाम का नाम है
  2. अब "स्टॉप" के प्रतीक पर क्लिक करें।

सामान्य दृश्य पर वापस आने के लिए, आपको बस ऊपर दाईं ओर मौजूद जावा बटन को दबाना होगा। आप इसे दबाकर भी कर सकते हैं: विंडोज -> खुला परिप्रेक्ष्य -> ​​अन्य ... -> जावा


2

यह उत्तर एक्लिप्स से नहीं निपटता है, लेकिन चूंकि यह सवाल एक Google में चल रहे एंड्रॉइड प्रोग्राम को रोकने के लिए खोज में आता है, मैं एक कमांड-लाइन विधि की पेशकश करना चाहूंगा। चलाने के लिए adb shell, उस प्रक्रिया की पीआईडी ​​ढूंढें, जिसे आप मारना चाहते हैं ps, उदाहरण के लिए मेरा था:

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

तो बस kill 2097और आप मुख्य स्क्रीन शो फिर से देखना चाहिए।


ऐप जीवनचक्र उल्लंघन सिस्टम संसाधन जारी न होने और डिवाइस रीबूट को साफ़ करने के लिए समस्याएँ पैदा कर सकता है।
डोमिनिक सेरिसानो

0

अपने कोड में ब्रेकपॉइंट जोड़ें जहां आप रोकना चाहते हैं और फिर F11 दबाकर इसे डिबग मोड में चलाएं।


0

Android लाश चित्र 1 - इस उत्तर के अनुसंधान के दौरान कई लाशों को मार दिया गया था

ओएस स्तर पर एक Android एप्लिकेशन जावा वीएम प्रक्रिया को मारना अनुशंसित नहीं है। दुर्भाग्य से, यह वही है जो ग्रहण डिवाइस विंडो "स्टॉप" करता है, जैसा कि System.exit () और शेल "किल" कमांड करता है।

यह सामान्य एप्लिकेशन जीवन-चक्र विधियों जैसे कि onStop (), onDestroy (), और अंतिम रूप () को प्रस्तुत करता है।

कई ऐप के लिए इन तरीकों की आवश्यकता होती है ग्रेसफुल एग्जिट (पूर्व के लिए। यदि वे सेंसर, मीडियाप्लेयर, इक्वालाइज़र, विज़ुअलाइज़र आदि जैसे सिस्टम ऑब्जेक्ट्स का उपयोग करते हैं)।

इन सिस्टम ऑब्जेक्ट्स को सिस्टम संसाधनों पर ज़ोंबी डेथ ग्रिप्स के साथ लटका दिया जाता है अगर इन जीवन-चक्र विधियों के दौरान रिलीज़ () को स्पष्ट रूप से नहीं कहा जाता है। अंजीर देखें। 1 से ऊपर। इससे किसी ऐप को रीस्टार्ट होने से रोका जा सकता है, और रिबूट की भी आवश्यकता होती है। वह अभद्र पहलू है।

एकमात्र समाधान यह सुनिश्चित करना है कि आप हमेशा onStop () या onDestroy () या कम से कम अंतिम रूप () के लिए कॉल के साथ अपने ऐप को सफाई से बाहर निकालें। डीबगर ऐसा करता है, जैसा कि ओएस शटडाउन पर करता है।

आप कमांड लाइन से एक सुंदर बाहर निकलने के लिए SIG_HUP घटनाओं को फंसाने के लिए अपना ऐप सेट कर सकते हैं।

जब आप वीएम ऐप को मारेंगे तभी आप ANR (पहले से ही एक ज़ोंबी) स्थिति में होंगे। ANR को निश्चित किया जाना चाहिए। कभी भी ऐसा ऐप न लगाएं जो इस राज्य में प्रवेश कर सके। यह बेहद असभ्य है।

तैनाती में इनकी निगरानी के लिए आप Google विश्लेषिकी और Play Store का उपयोग कर सकते हैं। आप अपने ज़ोंबी आवेदन के कारण रीबूट होने के बाद गुस्साए उपयोगकर्ताओं को एकल स्टार एएनआर समीक्षा नहीं देना चाहते हैं। बहुत बुरा।

याद रखें कि एंड्रॉइड लिनक्स है: इसे एक वास्तविक ओएस की तरह व्यवहार करें, और ऐप जीवन-चक्र का सम्मान करें अन्यथा आप निश्चित रूप से खतरनाक ज़ोंबी सर्वनाश का सामना करेंगे।

पुनश्च: यदि आप ज़ोंबी सादृश्य पसंद नहीं करते हैं, तो कल्पना के बारे में कैसे?

यहां छवि विवरण दर्ज करें


0

चित्र देखें: 1. डीडीएमएस पर क्लिक करें; 2. वर्तमान एप्लिकेशन का चयन करें; 3. "स्टॉप" पर क्लिक करें यहां छवि विवरण दर्ज करें


मैं ऐसा करता हूं और ऐप डीबग करना बंद कर देता है। लेकिन मामला यह है कि 1- usb से डिवाइस को डिसकनेक्ट करें, फिर ऐप को चलाएं जब ऐप फेस एरर को बंद कर दे और उसके बाद हर रन पर डिबगिंग फॉर्म लाए और यूएसबी केबल के कनेक्ट या बैकबटन प्रेस का इंतजार करें। 2- डिवाइस usb और ऐप रन (Ctrl + f11) से कनेक्ट होता है, फिर स्वचालित रूप से ऐप डिबग मोड के तहत चलता है। इसे हल करने के लिए, मैंने एक नया प्रोजेक्ट बनाया, और एक-एक करके कॉपी / पेस्ट की गई फाइलों को नए प्रोजेक्ट में डाला, लेकिन फिर से वही हुआ। अब कोई मदद?
अहमद अब्राहिमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.