2012-03-26 20 views
17

जैसा कि हम जानते हैं कि एप्लिकेशन प्रदाता पर सामग्री प्रदाता लोड लोड होता है। लेकिन सामग्री प्रदाता लॉन्च होने से पहले मैं कुछ संचालन करना चाहता हूं। मैं इस ऑपरेशन को कैसे पकड़ूं? इससे पहले कि सामग्री प्रदाता के onCreate विधिमैं सामग्री प्रदाता को कैसे प्रारंभ करूं?

उत्तर

24

मुझे लगता है कि मुझे समाधान मिला है। Ive मेरी कस्टम अनुप्रयोग वर्ग और ओवरराइड attachBaseContext विधि

<application android:name=".ApplicationController" ...> 

public class ApplicationController extends Application { 
    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 

     // some of your own operations before content provider will launch 
    } 
} 
+2

यह इस समय काम कर सकता है, लेकिन मुझे नहीं पता कि यह संस्करणों में भरोसेमंद होगा या नहीं। – CommonsWare

+0

यह 17 एपिस में बचे हुए)) शायद इस सुविधा में Google हमें इस ऑपरेशन के लिए कोई एपिस प्रदान करेगा, लेकिन अभी यह काम करता है। जवाब देने के लिए धन्यवाद! – pleerock

+1

यह समाधान काम करता है, हालांकि यह पूरी तरह कार्यात्मक नहीं है। उदाहरण के लिए, 'Context.getMainLooper()' विधि 'null' देता है जब' Application.onCreate() 'से पहले बुलाया जाता है। – Michael

10

कहा जा सकता है लेकिन मैं कुछ कार्यों बनाने के लिए सामग्री प्रदाता का शुभारंभ करेंगे से पहले ... इससे पहले कि सामग्री प्रदाता के onCreate विधि

AFAIK ही कहा जाता है चाहता हूँ, यह संभव नहीं है। onCreate() आपके ContentProvider आपके कोड को फोर्क करने के कुछ क्षण बाद कोड चलाने के लिए पहला मौका होगा। onCreate() को Application पर भी बुलाया जाता है, अगर मैं सही ढंग से समझता हूं।

+0

यह बहुत दुखी है। मैंने एप्लिकेशन के क्रिएट को ओवरराइड करने का प्रयास किया, लेकिन ऐसा लगता है कि सामग्री प्रदाता भी आवेदन के निर्माण पर पहले लोड करता है। उत्तर देने के लिए आपका शुक्रिया। – pleerock

3

मेरे समाधान call(Uri, String, String, Bundle) एपीआई (हां, तो यह पूरी तरह से पार्श्व-संगत नहीं है) के उपयोग की आवश्यकता बनाया। लेकिन मेरे पास ContentProvider है जो मुझे call विधि के ओवरराइड में उपयोग करने से पहले तैयार करने के लिए तैयार है। फिर मैं अपने Application.onCreate() में getContentResolver().call(BASE_URI, METHOD, null, Bundle.EMPTY) करता हूं। अनिवार्य रूप से, यह मेरे Application के निर्माण के बाद तक उस सामान को रोकता है, जिसे हम ContentProvider के onCreate स्वाभाविक रूप से करने की अपेक्षा करते हैं।

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