2011-12-23 8 views
5

मैंने एंड्रॉइड 4.0.3 (आइस क्रीम सैंडविच) में एक ऐप विकसित किया है, मैं गतिविधि नेविगेशन का परीक्षण करने के लिए दो गतिविधियों का उपयोग कर रहा हूं। लेकिन मैंने गतिविधि नेविगेशन में एक अलग व्यवहार का निरीक्षण किया।क्या यह एंड्रॉइड 4.0 में नया कार्यान्वयन है?

मैं गतिविधि ए से गतिविधि बी को कॉल कर रहा हूं गतिविधि बी में मैं केवल फिनिश() विधि को कॉल कर रहा हूं। ताकि हम पिछली गतिविधि ए देख सकें। यह वास्तव में अपेक्षित काम कर रहा है लेकिन समस्या बैक नेविगेशन (कॉलिंग फिनिश विधि या बैक-की दबाकर) के लिए है, यह ऑनर्यूम को कॉल करने के बजाय गतिविधि ए के क्रिएट() विधि को कॉल कर रही है ()। लेकिन पिछले संस्करणों में यह इस तरह व्यवहार नहीं कर रहा है। क्या यह एंड्रॉइड 4.0 में एक नया कार्यान्वयन है ??

यहाँ उदाहरण जो मैं लागू किया है:

Activity_A:

public class Activity_A extends Activity { 

    /** Called when the activity is first created. */ 
    static int count=0; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 1 called:"+(++count)+" Times"); 
    } 

    public void onClick(View v) 
    { 
     Intent intent=new Intent(this,Activity2.class); 
     startActivityForResult(intent, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d("onActivityResult", "Called with Code:"+resultCode); 
    } 

} 

Activity_B:

public class Activity_B extends Activity { 

     /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     TextView text=(TextView)findViewById(R.id.textcontent); 
     text.setText("Activity 2"); 
    } 

    public void onClick(View v) 
    { 
     setResult(1); 
     finish(); 
    } 
} 

कृपया जाँच करें और मुझे पता है अगर मैं किसी भी गलती कर रहा हूँ करते हैं।

धन्यवाद, राम।

+0

प्रश्न: क्या ऑनस्यूम के बाद आते हैं? मुझे लगता है कि गतिविधि बी को कॉल करने के बाद एंड्रॉइड द्वारा एक्टिविटी ए को गिरा दिया गया था - ऐसा लगता है कि मेरे द्वारा अनुमानित सभी एंड्रॉइड प्लेटफ़ॉर्म पर कुछ ऐसा हो सकता है। –

उत्तर

1

यह एंड्रॉयड गतिविधि प्रलेखन (Link here) से है:

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

शायद अंक 3 और 4 आपके लिए प्रासंगिक हैं।

+0

लेकिन यह लगभग दो गतिविधियां हैं। और इसके अलावा यह मेरे डिवाइस (सैमसंग नेक्सस एस) में 4.0.3 पर अपडेट करने के बाद पहली तीसरी पार्टी ऐप है, फिर यह कम मेमोरी इश्यू कैसे हो सकता है ?? – ram

+0

गतिविधि आरेख से - यदि आपकी गतिविधि पुरानी गतिविधि को अस्पष्ट करती है, तो गतिविधि बंद हो जाती है। अगर सिस्टम को मेमोरी की आवश्यकता नहीं है तो यह रेज़्यूम की बजाय रीस्टार्ट पर कॉल करता है। शायद यह वह जगह है जहां से आपका प्रोग्राम शुरू हो रहा है? उन्होंने ऑनस्टॉप से ​​आगे बढ़ने के बारे में आइसक्रीम में किसी भी बदलाव का उल्लेख नहीं किया है, जब तक कि सिस्टम को स्मृति की आवश्यकता न हो। – Davos555

+0

ठीक है आपकी जानकारी के लिए बहुत बहुत धन्यवाद। – ram

7

मुझे एक ही समस्या है !! सेटिंग्स/विकास/पर जाएं और 'गतिविधियों को नष्ट करें'

+0

** नोट **: - प्रभाव देखने के लिए फ़ोन को पुनरारंभ करना होगा। – Deepak

+0

अगर मैं एंड्रॉइड 4.03 पर छवि को कैप्चर करने के लिए कैमरा खोलता हूं तो मैंने छवि को कैप्चर या रद्द करने से पहले एक्टिविटी रीसेट विधि पर कॉल किया है, इसलिए परिणाम कोड हमेशा शून्य हो जाता है और मैं एक्टिविटी रिसेट पर छवि कैप्चर इवेंट को संभाल नहीं सकता। क्या कोई विचार है कि ऐसा क्यों होता है? मैं इसे एचटीसी मुझे 4.03 पर परीक्षण कर रहा हूं, हालांकि यह आई-टैब इंटीक्स्ट 4.04 संस्करण पर काम करता है। –

0

और सहेजे गए इंस्टेंसस्टेट() और ऑनस्टोर इंस्टेंससेट() विधियों पर गतिविधि उपयोग की स्थिति को बनाए रखने के लिए अनचेक करें।

0

यह उत्तर देखें: https://stackoverflow.com/a/16147110/1306419। मैं वहाँ से बोली:

आप अपनी गतिविधि एक (मूल गतिविधि) के रूप में के शुभारंभ मोड घोषित करने के लिए आवश्यकता हो सकती है: अपने AndroidManifest.xml में android:launchMode="singleTop"। यदि आप ऐसा नहीं करते हैं, तो एंड्रॉइड मानक लॉन्च मोड का उपयोग करता है, जिसका अर्थ है The system always creates a new instance of the activity in the target task. और गतिविधि को फिर से बनाया गया है (Android documentation)।

singleTop के साथ सिस्टम आपके मौजूदा गतिविधि (मूल अतिरिक्त के साथ) पर वापस आता है, यदि यह कार्य के पीछे के ढेर के शीर्ष पर है।

संबंधित मुद्दे