2012-04-12 10 views
10

द्वारा इसे नहीं मारा गया था, मैंने एक फोनगैप 1.5/एंड्रॉइड एप्लिकेशन बनाया है।फ़ोनगैप एंड्रॉइड एप्लिकेशन फिर से शुरू करने के बजाए पुनरारंभ करना, हालांकि ओएस

मेरा ग्राहक रिपोर्ट करता है कि, जब वह होम बटन का उपयोग करके ऐप छोड़ देता है, और उसके बाद ऐप आइकन का उपयोग करके इसे फिर से चालू करता है, तो ऐप फिर से शुरू होने की बजाय शुरुआत से फिर से शुरू होता है। हालांकि, जब वह होम बटन रखता है, तो ऐप हालिया ऐप्स में दिखाई देता है, और जब वह इस मेनू के माध्यम से ऐप तक पहुंचता है, तो ऐप अपेक्षित तरीके से फिर से शुरू होता है।

मैंने सोचा कि यह स्मृति की कमी के कारण ओएस द्वारा स्वचालित रूप से बंद होने वाले ऐप से जोड़ा जा सकता है, लेकिन अगर ऐसा होता है तो हालिया ऐप्स में क्लिक करते समय ऐप को फिर से शुरू नहीं करना चाहिए।

मैं एंड्रॉइड 2.3.4 के साथ अपने सोनी एरिक्सन XPERIA पर बग को पुन: पेश नहीं कर सका, क्लाइंट ने मोटोरोला डिफाई और किसी अन्य फोन पर इस व्यवहार का अनुभव किया है (मैं दूसरे फोन और ओएस संस्करणों का संदर्भ जोड़ूंगा जैसे ही मैं उन्हें प्राप्त करता हूं)।

अनुप्रयोग के प्रारंभ प्रक्रिया इस तरह से घोषित किया जाता है:

window.addEventListener('load', function(){ 
     document.addEventListener('deviceready', _onDeviceReady, false); 
}, false); 

इस अन्य घटनाओं के लिए प्रक्रियाओं संलग्न (हालांकि मैं यह शक, एप्लिकेशन वास्तव में शुरू से ही फिर से लॉन्च किया जा रहा है) द्वारा निर्धारित किया जा सकता है ?

क्या इस व्यवहार को रोकने के लिए एंड्रॉइड मैनिफेस्ट में कोई घोषणा करने की घोषणा है?

यहाँ मेरी AndroidManifest.xml

<application android:debuggable="true" android:icon="@drawable/appicon" 
    android:label="@string/app_name" > 
    <activity android:configChanges="orientation|keyboardHidden" android:name=".MyAppActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
<activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" 
      android:configChanges="orientation|keyboardHidden"> 
    <intent-filter> 
    </intent-filter> 
    </activity> 
</application> 

में गतिविधि हस्ताक्षर है है कि कुछ Android फ़ोन/संस्करणों में एक ज्ञात बग?

संपादित करें: होम बटन पकड़े हुए वर्तमान में चल रहे ऐप्स लेकिन हालिया ऐप्स प्रदर्शित नहीं करते हैं। उस मेनू में व्यवहार मुख्य आइकन से अलग क्यों होगा?

+0

मैंने शीर्षक को और अधिक स्पष्ट होने के लिए बदल दिया है –

+0

क्या यह केवल डिफ़ॉल्ट गतिविधि शुरू करने के बीच अंतर नहीं है (संभवतः अंतिम ज्ञात बिंदु से)? यदि आपके पास पिछले "सत्र" है, तो आप एक अलग गतिविधि में हो सकते हैं, जबकि मेनू से आप डिफ़ॉल्ट गतिविधि शुरू करते हैं? साथ ही, मुझे नहीं लगता कि आप 'घर' को लंबे समय से दबाकर "वर्तमान में चल रहे ऐप्स" देखते हैं, आपको इसके लिए टास्कमैनर पर जाना चाहिए। होम लम्बाई नहीं करता है, बस आपको हाल ही में इस्तेमाल किए गए ऐप्स दिखाता है, चाहे वे अभी भी चलें या नहीं? – Nanne

+0

यह सही है कि मेरे फोन पर 'होम' लम्बे समय से मुझे हालिया ऐप्स लाएंगे। लेकिन इस मेनू से लॉन्च करने से वर्तमान सत्र 'और आइकन से लॉन्च नहीं हो रहा है? मैं आइकन को डिफ़ॉल्ट गतिविधि शुरू करने से कैसे रोक सकता हूं और इसे चालू सत्र फिर से शुरू कर सकता हूं? मेरे फोन और मेरे क्लाइंट के फोन पर व्यवहार अलग क्यों होगा? धन्यवाद ... –

उत्तर

7

आप अपने AndroidManifest में गतिविधि टैग में निम्नलिखित जोड़ना चाहते हैं।xml:

android:launchMode="singleTask" 

तो यह इस तरह दिखना चाहिए:

<activity android:name="MyApp" android:label="@string/app_name" 
    android:theme="@android:style/Theme.Black.NoTitleBar" 
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" 
    android:launchMode="singleTask"> 

चेक बाहर launchMode बारे में अधिक जानकारी के लिए इस पेज: http://www.intridea.com/blog/2011/6/16/android-understanding-activity-launchmode

+1

दरअसल, यदि आप एंड्रॉइड गतिविधि दस्तावेज़ पढ़ते हैं, तो एकल टास्क उपयोग को निराश और एंड्रॉइड सेट करना प्रतीत होता है: launchMode = "singleTop" भी समस्या हल करता है। ओपी द्वारा वर्णित मुद्दा अभी भी डिफ़ॉल्ट सेटिंग्स के साथ कॉर्डोवा 3.3.0 के साथ होता है। यदि एंड्रॉइड: लॉन्चमोड = "सिंगलटॉप" नई कॉर्डोवा परियोजनाओं के लिए डिफ़ॉल्ट सेटिंग्स थी, तो मुझे सच में लगता है कि यह कई सिरदर्द बचा सकता है! – QuickFix

2

यह वास्तव में एंड्रॉइड में डिज़ाइन द्वारा है, जहां ओएस एप्लिकेशन के जीवन चक्र को नियंत्रित करता है। आप find more information here कर सकते हैं। अपने AndroidManifest.xml में अपनी गतिविधि टैग में

android:configChanges="orientation|keyboardHidden" 

:

+3

मुझे डर है कि यह मेरे प्रश्न का उत्तर नहीं देता है। ओएस गतिविधि के जीवन चक्र को नियंत्रित करता है, लेकिन, जैसा कि ऐप "चल रहे ऐप्स" में दिखाई देता है, और वहां से फिर से शुरू किया जा सकता है, इसलिए इसका मतलब है कि स्मृति की कमी के कारण गतिविधि नहीं मारा गया था। यदि यह नहीं मारा गया था, तो ऐप आइकन पर क्लिक करने से यह फिर से लॉन्च हो जाता है? अगर यह डॉक्यू में है ध्यान, क्या आप उस बिंदु को हाइलाइट कर सकते हैं जो इस व्यवहार से संबंधित है क्योंकि मुझे यह नहीं मिल रहा है। –

3

अरे लुकास आप की क्या ज़रूरत है।

जैसा कि आपने कहा था कि दूसरी चीज जो हो सकती है वह है कि आपका ग्राहक का फोन स्मृति पर कम चल रहा है और ओएस स्मृति को मुक्त करने के लिए आपके ऐप को मार रहा है।

+0

धन्यवाद साइमन, मैंने अभी प्रश्न में अपने AndroidManifest.xml का वह हिस्सा जोड़ा है। जैसा कि सवाल में कहा गया है, अगर ओएस ने ऐप को मार दिया था, तो इसे "हालिया ऐप्स" मेनू से फिर से शुरू करने में सक्षम नहीं होना चाहिए ... –

+0

क्या आपको अभी भी समस्या है? –

+0

वास्तव में ग्राहक ने अंततः स्वीकार किया कि वह अपने फोन के हेरफेर में कुछ त्रुटियां कर रहा था ... इसलिए मैं निश्चित रूप से कभी नहीं जानता और निश्चित रूप से कुछ बग नहीं था या नहीं ... –

-1

मेरे पास सैमसंग गैलेक्सी नोट II है और मुझे एक ही समस्या का सामना करना पड़ा। इसलिए, मैंने AndroidManifest.xml को संशोधित किया और अब यह सैमसंग और एचटीसी थंडरबॉल्ट दोनों पर काम करता है।

यहाँ संशोधनों हैं:

<uses-feature android:name="android.hardware.camera" android:required="false"/> 

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="10"/> 

<activity android:configChanges="orientation|keyboardHidden" /> 
0

इसे आज़मा कर देखें ...

उपयोग एंड्रॉइड: लॉन्चमोड = "एकल इंस्टेंस" आपकी मेनिफेस्ट फ़ाइल के गतिविधि टैग में।

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