2011-12-23 10 views
113

मैं onNewIntent() के माध्यम से एक खोज-संवाद से इराद प्राप्त करने के लिए एक एकल टोप गतिविधि का उपयोग कर रहा हूं।ऑन न्यूइन्टेंट() लाइफसाइक्ल और पंजीकृत श्रोताओं

मैंने देखा कि onPause()onNewIntent() से पहले कहा जाता है, और उसके बाद यह onResume() पर कॉल करता है। दिखने में:

  • खोज संवाद की पहल की
  • खोज अभिप्राय गतिविधि के लिए निकाल दिया
  • onPause()
  • onNewIntent()
  • onResume()

समस्या मैं onResume() में पंजीकृत श्रोताओं कि भी निकल जाते हैं है है onPause() में, लेकिन वे एन हैं onNewIntent() कॉल के अंदर eeded। क्या उन श्रोताओं को उपलब्ध कराने का कोई मानक तरीका है?

उत्तर

213

onNewIntent() सिंगलटॉप गतिविधियों के लिए प्रवेश बिंदु के रूप में है जो पहले से ही स्टैक में कहीं और चलाता है और इसलिए onCreate() पर कॉल नहीं कर सकता है। गतिविधियों से जीवन चक्र के दृष्टिकोण से को onNewIntent() से पहले कॉल करने की आवश्यकता है। मेरा सुझाव है कि आप इन श्रोताओं को onNewIntent() के अंदर उपयोग न करने के लिए अपनी गतिविधि को फिर से लिखें। सभी सेटअप तर्क getIntent() का उपयोग करके onResume() पर होने से

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    // getIntent() should always return the most recent 
    setIntent(intent); 
} 

: उदाहरण के लिए समय की सबसे मेरी onNewIntent() तरीकों बस इस तरह दिखता है।

+0

@Rodja की तरह डाल आप इस पर http://stackoverflow.com/questions/19092631/logout-from-the-application- टिप्पणी कृपया जाएगा द्वारा हमेशा onNewIntent आह्वान कर सकते हैं एंड्रॉइड/1 9 0 9 2683? noredirect = 1 # 19092683 भी – Developer

+0

मूल प्रश्न से संबंधित: ध्यान रखें कि अगर आप खोज 'इरादे' को 'ऑनस्यूम()' में संभालते हैं, तो आपकी गतिविधि शायद हर बार एक खोज निष्पादित करने का प्रयास करेगी फिर से शुरू होता है, शायद आप जो व्यवहार चाहते हैं। –

+0

रोडजा कहता है: गतिविधियों से जीवन चक्र के दृष्टिकोण से इसे न्यूज़ेंटेंट() पर पहले से रोकने के लिए आवश्यक है (एंड्रॉइड को इसे इस तरह से डिजाइन करने की आवश्यकता नहीं थी। आपकी गतिविधि पहले से ही अपने जीवन चक्र के माध्यम से फिर से शुरू करने के लिए चला गया है()। एंड्रॉइड को कॉल करने के लिए कोई आवश्यकता नहीं है() फिर से फिर से शुरू करें()। यदि ऐप फिर से शुरू हो जाता है तो ओएस केवल न्यूइन्टेंट() पर कॉल कर सकता है और फिर से शुरू होने वाले राज्य में रह सकता है। –

13

ऑनन्यूइन्टेंट() हमेशा सिंगलटॉप/टास्क गतिविधियों के लिए बुलाया जाता है जब गतिविधि पहली बार बनाई जाती है। उस समय क्रेट को बुलाया जाता है।

आप onCreate विधि में

@Override 
public void onCreate(Bundle savedState) 
{ 
    super.onCreate(savedState); 
    onNewIntent(getIntent()); 
} 

@Override 
protected void onNewIntent(Intent intent) 
{ 
    super.onNewIntent(intent); 
    //code 
} 
+43

आम तौर पर जीवन चक्र के तरीकों को सीधे कॉल करने का अच्छा विचार नहीं है, नहीं? हो सकता है कि हानिकारक, या शायद न्यूइन्टेंट() के कुछ आधार कार्यान्वयन का मानना ​​है कि ऑन पॉज़() को पहले से ही बुलाया गया है? संभवतः दोनों स्थानों से कॉल करने योग्य विधि में ऐप कोड को समाहित करने के लिए सुरक्षित रूप से सुरक्षित है। – BernalKC

+10

सहमत हुए। हम इस दृष्टिकोण का उपयोग कर कुछ किनारे के मामलों में भाग गए। सबसे अच्छा बचा है। –

+2

हाँ .. मैं भी इससे बचने पर सहमत हूं ... यह उन लोगों के लिए था जो न्यूटेंट पर ऑन्रेट से भी काम करना चाहते हैं। –

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