2010-09-10 11 views
7

मैं एंड्रॉइड सीख रहा हूं और लॉन्चमोड = "सिंगल टास्क" के साथ एक समस्या में आया हूं। दस्तावेज़ीकरण में कहा गया है कि जब इस विशेषता का उपयोग किया जाता है, तो गतिविधि हमेशा रूट गतिविधि के रूप में एक नए कार्य में लॉन्च की जाती है। दूसरा, दस्तावेज बताता है कि यदि इस तरह की गतिविधि में किसी इरादे को लक्षित किया जाता है, तो उसके कार्य ढेर में ऊपर बैठे गतिविधियां होती हैं, ऐसे इरादों को त्याग दिया जाता है (हालांकि कार्य अभी भी अग्रभूमि में लाया जाता है)।एंड्रॉइड: लॉन्चमोड = "सिंगल टास्क" का व्यवहार जैसा वर्णन नहीं किया गया है?

मैं इसके साथ खेल रहा हूं, और जो व्यवहार मैं देखता हूं वह बिल्कुल अलग है। विशेष रूप से: - लॉन्चमोड = "सिंगल टास्क" के साथ गतिविधियां हमेशा कार्य स्टैक में रूट गतिविधि नहीं होती हैं। वे एक ही एफ़िनिटी के साथ मौजूदा ढेर के रास्ते पर चढ़ गए हैं। - जब इस तरह की गतिविधि में किसी इरादे को लक्षित किया जाता है और स्टैक में इसके ऊपर अन्य गतिविधियां होती हैं, तो इरादा को त्याग दिया नहीं जाता है। इसके बजाय ढेर में इसके ऊपर की गतिविधियां त्याग दी गई हैं। तब इरादा को सामान्य रूप से गतिविधि के माध्यम से गतिविधि के माध्यम से वितरित किया जाता है।

क्या कोई यह पुष्टि कर सकता है कि यह वास्तविक व्यवहार है? यदि हां, तो दस्तावेज़ गलत क्यों हैं? यदि नहीं तो मैंने गलत क्या किया है। । ।

संपादित करें:

एक उदाहरण इस व्यवहार का प्रदर्शन यहां पाया जा सकता: http://groups.google.co.uk/group/android-developers/browse_thread/thread/fd8f249803b4688a# पार पद के लिए क्षमा करें, लेकिन मैं यहाँ पोस्ट करने के लिए एक सभ्य प्रारूप में उदाहरण प्राप्त करने में असमर्थ था ...

+0

मैं इस व्यवहार की पुष्टि कर सकता हूं, लेकिन मुझे यह समझ में नहीं आता है। बाल गतिविधियों को नष्ट कर दिया जाता है। –

उत्तर

0

मैं इस मोड में अजीब व्यवहार का कुछ अनुभव जोड़ सकता हूं। शायद इस सवाल का जवाब मुझे भी मदद करता है।

मैं अपनी पहली स्क्रीन को स्थान-चयन खोज देना चाहता था। मैं अपनी पहली गतिविधि में क्वेरी को वापस पास करना चाहता था। वह गतिविधि खोज आविष्कार और क्वेरी प्राप्त करना था। हालांकि, "सिंगल टास्क" ने मेरी योजनाओं को नष्ट कर दिया; (

क्वेरी के साथ खोज-उद्देश्य मेरी पहली सक्रियता तक कभी नहीं पहुंचा। इसके बजाय "android.intent.action.MAIN" मेरी पहली गतिविधि तक पहुंच गया। "सिंगल टास्क" को हटाते समय खोज- आशय के माध्यम से हो जाता है। लेकिन तब मैं अपने होमस्क्रीन के कई उदाहरण बना सकते हैं।

<activity 
    android:label="@string/app_name" 
    android:name="ActivityStart" 
    android:screenOrientation="portrait" 
    android:launchMode="singleTask"> 
    <intent-filter> 
    <action 
     android:name="android.intent.action.SEARCH" /> 
    <action 
     android:name="android.intent.action.MAIN" /> 
    <category 
     android:name="android.intent.category.LAUNCHER" /> 

    </intent-filter> 
    <meta-data 
    android:name="android.app.searchable" 
    android:resource="@xml/searchable" /> 

</activity> 

अब मैं एक TextView बजाय का उपयोग करें ...

4

यह taskAffinity की एक समस्या है। जब आप एक गतिविधि शुरू, एंड्रॉयड की जाँच करता है taskAffinity उस गतिविधि का जिसे आप शुरू करना चाहते हैं। यदि यह taskAffinity के समान है वह आपके कार्य में रूट गतिविधि करता है, तो यह launchMode="singleInstance" या launchMode="singleTask" को अनदेखा करेगा (क्योंकि उन लॉन्च मोड में एंड्रॉइड की गतिविधि को लॉन्च करने के लिए एक नया कार्य बनाने की आवश्यकता होगी) और वर्तमान कार्य में गतिविधि शुरू करें।

दुर्भाग्य से, यह अच्छी तरह से प्रलेखित नहीं है, लेकिन taskAffinitylaunchMode से अधिक प्राथमिकता लेता है।

यदि आप वास्तव में singleTask या singleInstance गतिविधि (जो आमतौर पर ऐसा करने की सही बात नहीं है क्योंकि यह अन्य ग़लत चीजों की पूरी गड़बड़ी लाती है जो आपको गलत होने की संभावना है), तो आपको यह सुनिश्चित करना होगा कि अपने singleInstance या singleTask गतिविधि अपने <activity> परिभाषा में प्रकट में निम्नलिखित है:

android:taskAffinity="" 
2

Documentation का कहना है:

FLAG_ACTIVITY_NEW_TASK यदि पहले से ही एक ही आत्मीयता के साथ एक मौजूदा काम है ... "singleTask" launchMode रूप में एक ही व्यवहार ...

कैसे गतिविधि आशय (FLAG_ACTIVITY_NEW_TASK) के साथ शुरू किया गया है depends on activity affinity

का उत्पादन नई गतिविधि के रूप में, गतिविधि उस कार्य में लॉन्च की गई है। यदि नहीं, तो यह नया कार्य शुरू करता है।

तो, एकल टास्क लॉन्च मोड के लिए समान संबंध जांच होना चाहिए।

+0

मुझे नहीं लगता कि वे दोनों "समान" व्यवहार का उत्पादन कर रहे हैं। Affinities मानते हैं ठीक है, एकल टास्क भी रूट गतिविधियों को छोड़कर कार्य गतिविधियों को साफ़ करने की कोशिश करेगा। – zgulser

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