2011-10-07 17 views
43

मेरे एंड्रॉइड एप्लिकेशन में, मेरे पास DefaultApplication कक्षा है जो android.app.Application तक फैली हुई है, और इसके onCreate() में मैं कुछ सेवाओं को बांधता हूं जिनका उपयोग इस ऐप में मेरी अन्य गतिविधियों द्वारा किया जाएगा।एप्लिकेशन की ऑनक्रेट() विधि कब कॉल की जाती है?

इसके अलावा मेरे पास BroadcastReceiver है जो सी 2 डीएम संदेश सुनता है और प्राप्त करता है। जब यह रिसीवर एक संदेश प्राप्त करता है जब एप्लिकेशन नहीं चल रहा है, तो यह एक संवाद को फायर करेगा जो आगामी संदेश दिखाता है और यह मेरे आवेदन की गतिविधि शुरू करेगा।

मेरा प्रश्न है, जब मैं DefaultApplication के साथ किसी भी बातचीत के बिना एक गतिविधि शुरू है, मेरे DefaultApplication के onCreate() कहा जाता हो जाएगा क्योंकि है कि आवेदन की एक गतिविधि शुरू कर दिया है?

public class DefaultApplication extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     doBindService(); 

    } 

    void doBindService() { 

     // Establish a connection with the service. We use an explicit 
     // class name because we want a specific service implementation that 
     // we know will be running in our own process (and thus won't be 
     // supporting component replacement by other applications). 

     bindService(new Intent(DefaultApplication.this, SocketService.class), 
       socketServiceConnection, Context.BIND_AUTO_CREATE); 

     mIsBound = true; 
    } 

    void doUnbindService() { 
     if (mIsBound) { 
      // Detach our existing connection. 
      unbindService(socketServiceConnection); 
      mIsBound = false; 
     } 
    } 
} 

प्रकट इस तरह दिखता है:

<application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:name="com.mypackage.DefaultApplication" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
     android:debuggable="true"> 
<service android:name="com.mypackage.services.SocketService"></service> 
<activity android:name="TestActivity" 
      android:screenOrientation="landscape"></activity> 
</application> 
+1

हाँ, यह इस काम करता है, मैं नहीं एक और बाकी देखा है ... – atasoyh

+0

मैं unserstand नहीं तुम क्यों विस्तार 'Application' करते हैं? क्या आपको 'गतिविधि' का विस्तार नहीं करना चाहिए? – Caner

+0

@LAS_VEGAS मेरे बाकी डिफॉल्ट एप्लिकेशन में मैं कुछ डेटा स्टोर करता हूं और कुछ विधियों को परिभाषित करता हूं जिनका उपयोग अनुप्रयोग-व्यापी होता है। मैंने यहां केवल इसका एक हिस्सा कॉपी किया है। –

उत्तर

40

केवल पहली बार।

जब गतिविधि शुरू होती है और एप्लिकेशन लोड नहीं होता है, तो onCreate() दोनों विधियों को बुलाया जाएगा।

लेकिन गतिविधि के बाद की शुरुआत के लिए, आवेदन के onCreate() को नहीं कहा जाएगा।

+0

सख्ती से सच नहीं है। [पॉल का जवाब एक उपयोगी लिंक सहित थोड़ा और बताता है।] (Http://stackoverflow.com/a/28498115/383414) –

28

आप जब onCreatehere कहा जाता है एक अधिकारी उत्तर मिल सकता है

यहाँ परिभाषा और प्रकट मेरी DefaultApplication के हैं।

किसी भी गतिविधि, सेवा, या रिसीवर ऑब्जेक्ट्स (सामग्री प्रदाताओं को छोड़कर) से पहले, एप्लिकेशन शुरू होने पर कॉल किया गया है। कार्यान्वयन जितना जल्दी हो सके (उदाहरण के लिए आलसी राज्य के प्रारंभिकरण का उपयोग करना) क्योंकि इस फ़ंक्शन में बिताए गए समय पहली गतिविधि, सेवा, या किसी प्रक्रिया में रिसीवर शुरू करने के प्रदर्शन को सीधे प्रभावित करता है। यदि आप इस विधि को ओवरराइड करते हैं, तो सुपर.ऑनक्रेट() को कॉल करना सुनिश्चित करें।

9

ध्यान दें कि यदि किसी भी सेवा को अन्य प्रक्रियाओं में चलाने के लिए परिभाषित किया गया है उदा। android:process= के साथ एप्लिकेशन के onCreate() को उस प्रक्रिया के लिए फिर से बुलाया जाएगा।

उदाहरण के लिए देख Android Application class method onCreate being called multiple times

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