2011-01-24 8 views
29

मुझे एक गतिविधि मिली है कि जब यह शुरू होता है, तो यह इंटरनेट से एक छवि लोड करता है। स्मृति को सहेजने के प्रयास में, जब गतिविधि को दबाए जा रहे बैक बटन से छोड़ा जाता है, तो मैं चाहता हूं कि गतिविधि सभी डेटा को डंप करे, जो उसमें मौजूद सभी तारों और छवियों से छुटकारा पाती है। मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका सिर्फ गतिविधि को मारना था।बैक बटन दबाए जाने पर मैं गतिविधि को कैसे मारूं?

ठीक है, बैक बटन दबाए जाने पर मुझे कॉलबैक पता लगाना प्रतीत नहीं होता है। इसलिए, मैं onPause() और onStop() कार्य के लिए कॉलबैक का उपयोग करने का प्रयास कर रहा हूं लेकिन दोनों तरीकों से मेरे ऐप को बंद कर दिया गया है। यहां कोड है:

public void onPause() { 
    this.finish(); 
} 
public void onStop() { 
    finish(); 
} 

मैंने इसमें कई बदलाव किए हैं, लेकिन उनमें से कोई भी काम नहीं कर रहा था। कोई विचार?

+0

आप वर्तमान में क्या देख रहे हैं? पिछली गतिविधि को चालू करने के लिए? बटन –

उत्तर

36

अपनी गतिविधि में जोड़ना

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+1

क्या बात है? बैक बटन दबाकर स्वचालित रूप से गतिविधि स्टैक नीचे जायेगा। 'खत्म करें)' बस यह सुनिश्चित करता है कि आप वापस नहीं जा सकते। (उसने कहा, सवाल स्वीकार्य रूप से अस्पष्ट है।) – EboMike

+2

बेशक, लेकिन गतिविधि को मार दिया गया है, बैक बटन दबाकर निश्चित नहीं है ताकि खत्म करने के लिए फिनिश महत्वपूर्ण हो और जो सवाल में पूछा गया है, लेकिन स्मृति जारी करने के बाद से यह स्वचालित रूप से ओएस – ingsaurabh

+2

द्वारा किया जाता है। यदि गतिविधि सामने नहीं है, तो इसे ओएस द्वारा पुनः दावा किया जा सकता है। समाप्त या नहीं। – EboMike

4

ठीक है, अगर तुम कैसे आवेदन जीवन चक्र काम करता है, here की संरचना का अध्ययन है, तो आप को पता है कि onPause() जब एक और गतिविधि लाभ फोकस कहा जाता है आया हूँ , और onStop() कहा जाता है जब गतिविधि अब दिखाई नहीं दे रही है।

जो मैंने अभी तक सीखा है, उससे आप केवल सक्रिय गतिविधि और/या फोकस की गतिविधि से finish() पर कॉल कर सकते हैं। यदि आप finish() को onPause() विधि से कॉल कर रहे हैं जिसका अर्थ है कि जब आप गतिविधि सक्रिय नहीं होती हैं तो आप इसे कॉल कर रहे हैं। इस प्रकार एक अपवाद फेंक दिया जाता है।

जब आप finish()onStop() से कॉल कर रहे हैं तो गतिविधि पृष्ठभूमि में भेजी जा रही है, इस प्रकार यह दिखाई नहीं देगी, फिर यह अपवाद।

जब आप back बटन दबाते हैं, onStop() कहा जाता है।

शायद, एंड्रॉइड स्वचालित रूप से आपके लिए क्या करेगा जो आप वर्तमान में करना चाहते हैं।

6

सबसे पहले, finish() आपकी प्रक्रिया को नष्ट नहीं करता है और स्मृति को मुक्त नहीं करता है। यह गतिविधि गतिविधि से गतिविधि को हटा देता है। आपको प्रक्रिया को मारने की आवश्यकता होगी, जिसका उत्तर प्रश्नों के समूह में दिया जाता है (क्योंकि यह कई बार पूछा जा रहा है)।

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

कृपया see here विषय पर एक महान लेखन के लिए कृपया।

+7

यदि गतिविधि संसाधनों का बहुत उपयोग कर रही है, तो जीसी के इंतजार के विरोध में इसे अपने आवेदन के अंदर से क्यों न मारें? एक पूरी नोटर प्रक्रिया है जो चलाना होगा, इसलिए फोन को धीमा करना। अच्छी स्मृति प्रबंधन कार्यक्रम के भीतर इसे प्रबंधित करने के हर प्रयास कर रही है। यही कारण है कि अधिकांश प्रबंधित प्रोग्रामिंग भाषाएं और विचार स्वचालित रूप से प्रोग्राम में स्वयं क्लीनअप कोड में डाल दिए जाते हैं, और यही कारण है कि आप जीवन चक्र क्यों दे रहे हैं, ताकि आप अपने आवेदक के भीतर से मेमोरी का सर्वोत्तम प्रबंधन कर सकें। – Shaun

+1

शॉन सही है, अच्छी मेमोरी प्रबंधन कार्यक्रम के भीतर इसे प्रबंधित करने के हर प्रयास कर रहा है। – dns

61

सरल अवहेलना onBackPressed विधि:

@Override 
    public void onBackPressed() { 
      super.onBackPressed(); 
      this.finish(); 
    } 
13
public boolean onKeyDown(int keycode, KeyEvent event) { 
    if (keycode == KeyEvent.KEYCODE_BACK) { 
     moveTaskToBack(true); 
    } 
    return super.onKeyDown(keycode, event); 
} 

मेरा ऐप उपरोक्त कोड के साथ बंद हुआ।

+0

यह काम कर रहा है, धन्यवाद – Mohsen

+0

इसका कामकाज लेकिन ऐप हमेशा एक ही पृष्ठ खुला रहता है जब भी ऐप नहीं मारा जाता है –

+0

लेकिन लॉन्चर एक्टिविटी में ऐप शुरू करना चाहते हैं –