2011-05-30 14 views
15

मुझे कोई समस्या है। जब मैं पहली बार अपने एंड्रॉइड एप्लिकेशन की शुरुआत करता हूं, मुख्य गतिविधि में onCreate और onResume दोनों कहा जाता है। लेकिन मैं केवल ऑनक्रेट कहलाता हूं।एंड्रॉइड ऑनक्रेट ऑन रीज़्यूम

मैं क्या कर सकता हूं?

+2

यदि आप नहीं चाहते हैं तो ऑनस्यूम() को हटा दें। यह प्रभावित नहीं होगा। – Kakey

+0

इस उत्तर की जांच करें यह उपयोगी हो सकता है: http://stackoverflow.com/a/8516056/265167 –

उत्तर

1

आप कुछ भी नहीं कर सकते, क्योंकि गतिविधि जीवन चक्र काम करता है।

जीवन चित्र दिखाते हुए एक चित्र के लिए http://developer.android.com/guide/topics/fundamentals/activities.html#Lifecycle देखें।

+1

ठीक है धन्यवाद .. तो अगर ऑनस्यूम को किसी भी समय बुलाया जाता है तो गतिविधि को किसी निश्चित तरीके से व्यवहार करने का कोई तरीका नहीं है पहली पहुंच, और दूसरी तरफ जब वापस बुलाया जाता है .. क्या मैं सही हूँ? – Alessio

+0

@Alessio हां, 'onRestart() 'विधि देखें। @ फेनिक्स का जवाब देखें। –

1

जैसा कि आप एपीआई में देख सकते हैं, गतिविधि लाइफसाइकिल हमेशा गतिविधि दिखाने से पहले रेज़्यूम पर कॉल करता है। http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

मुझे लगता है कि आप पहली पहुंच के लिए वैश्विक बूलियन बना सकते हैं और इसे गलत पर सेट कर सकते हैं। फिर ऑनस्यूम ओवरराइड करें और चर की जांच करें। यदि गलत है, तो इसे सही पर सेट करें और यदि सत्य है, तो super.onResume पर कॉल करें।

काम करना चाहिए, लेकिन मुझे नहीं पता कि इसे सरल तरीके से संभाला जा सकता है और मुझे इसका परीक्षण करने के लिए यहां एसडीके तक पहुंच नहीं है।

+0

मैं धन्यवाद का प्रयास करूंगा !! – Alessio

42

एसडीके दस्तावेज़ों के अनुसार जो आप देख रहे हैं वह इच्छित व्यवहार है। गतिविधि के लिए दस्तावेज़ों में फ्लोचार्ट पर एक नज़र डालें - Activity Lifecycle

प्रोग्रामेटिक रूप से आप इस बात को ट्रैक कर सकते हैं कि एक उदाहरण सदस्य को यह ट्रैक करने के लिए कि क्या पहले रिलीज़ किया गया है - पहली बार इसे कॉल किया गया है, चर सेट करें और वापसी करें।

private boolean resumeHasRun = false; 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (!resumeHasRun) { 
     resumeHasRun = true; 
     return; 
    } 
    // Normal case behavior follows 
} 
+0

जब मैं ऐसा करने का प्रयास करता हूं, तो मुझे resusHasRun = true सेट करने का प्रयास करते समय "निलंबित (अपवाद रनटाइम अपवाद)" प्राप्त होता है। कोई विचार? – proudgeekdad

+6

इसके बजाय आपको गतिविधि की ऑनस्टार्ट() विधि का उपयोग करना चाहिए, यह उस उपयोग के मामले के लिए बिल्कुल इरादा है। –

+1

बशर्ते कि आपकी गतिविधि बंद हो जाती है ('ऑनस्टॉप() '), तो @FenixVoltres सही है, उसमें, आपको' onRestart()' का उपयोग करना चाहिए। –

12

सही जवाब Activity के onRestart() विधि का उपयोग करने के लिए है। यह शायद आप जो खोज रहे हैं।

+0

जरूरी नहीं है। 'ऑनस्टार्ट()' केवल तभी बुलाया जाता है जब गतिविधि बंद हो जाती है। – anon

+0

आप सही हैं, लेकिन उपर्युक्त प्रश्न का उत्तर 'onResume()' (जिसे गतिविधि बनाया जाता है) से कोड को ऑनरस्टार्ट() 'पर ले जाना था, जो नहीं है, बिंदु क्या था। –

+1

@bowmanb सही है, लेकिन अपने इरादे को जानने के बिना, ज्यादातर मामलों में, 'onRestart()' वह है जो आप यहां चाहते हैं। –

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