क्या किसी एप्लिकेशन को पृष्ठभूमि में चलने के लिए बाध्य करने का कोई तरीका है, इससे कोई फर्क नहीं पड़ता?


12

आइस क्रीम सैंडविच (ICS) पर OS आपके ऐप को श्रेणीबद्ध करता है और प्रत्येक श्रेणी की अपनी सीमा होती है जिसमें OS यह निर्धारित करने के लिए उपयोग करता है कि कौन सा ऐप मेमोरी से बाहर होने पर सबसे पहले बंद हो।

क्या आप में से कोई इससे नाराज़ है, कहते हैं कि आपने किसी चीज़ के समय को मापने के लिए पृष्ठभूमि में चलने के लिए एक टाइमर खोला, तो आपने कुछ और ऐप खोले और अपने टाइमर पर वापस आ गए, यह देखने के लिए कि यह रीसेट या बंद है? मेरा मतलब है, गंभीरता से, यह वास्तव में कष्टप्रद कष्टप्रद है।

क्या किसी एप्लिकेशन को पृष्ठभूमि में चालू रहने के लिए बाध्य करने का एक तरीका है, भले ही ओएस स्मृति से बाहर हो, तब भी क्या होगा?


7
यह ऐप द्वारा एक बुरा कोड है। एक उपयोगकर्ता को इसके साथ कभी भी परेशान नहीं होना चाहिए और एंड्रॉइड प्रदान करता है ताकि ऐप अपने राज्य को बचा सके और इसे बाद में (शुरुआती एंड्रॉइड के बाद से) पुनर्स्थापित कर सके। आपको ऐप डेवलपर को बग रिपोर्ट भेजनी चाहिए।
प्रवाह

जवाबों:


8

स्वीकृत उत्तर गलत या पुराना निकला। Xposed ऐप के लिए "ऐप सेटिंग्स" मॉड्यूल आपको ऐप्स को मारे या मुक्त किए जाने से बचाने के लिए प्रति ऐप के आधार पर निर्दिष्ट करने की अनुमति देता है:

http://repo.xposed.info/module/de.robv.android.xposed.installer

http://repo.xposed.info/module/de.robv.android.xposed.mods.appsettings

ऐसे निचले स्तर के व्यवहार को बदलने वाले ऐप्स के साथ खेलते समय जिम्मेदार देखभाल का अभ्यास अवश्य किया जाना चाहिए।


एक ध्यान दें, कि इसके लिए रूट की आवश्यकता होती है और यह एक भारी Android OS संशोधन की स्थापना है।
swisgerber.dev

5

सरल उत्तर: नहीं। Android हमेशा अप्रयुक्त मेमोरी को प्राथमिकता देने के लिए OOM (आउट-ऑफ-मेमोरी) का उपयोग करता है। आप कुछ कार्य प्रबंधकों के साथ ऐप्स की प्राथमिकताओं (कम से कम रिबूट तक) को बदल सकते हैं लेकिन फिर भी यदि मेमोरी कम चलती है, तो बैकग्राउंड में ऐप्स मारे जाने लगते हैं।

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

कुछ टाइमर इस समस्या से बचने के लिए उच्च प्राथमिकताओं वाली सेवाओं का उपयोग करते हैं, लेकिन यदि आप पर्याप्त उच्च-प्रदर्शन, संसाधन-हॉगिंग एप्लिकेशन लॉन्च करते हैं, जबकि टाइमर पृष्ठभूमि में है, तो यह अंततः मारा जाएगा।


1
यह उस तरह से होने की जरूरत नहीं है, IMO। सिस्टम को अपने पुराने तरीकों को डिफ़ॉल्ट रूप से करने दें और यदि उपयोगकर्ता किसी विशेष एप्लिकेशन को पृष्ठभूमि में चलाने के लिए उस विशेष क्षण में चाहता है, जब आवश्यकता उत्पन्न होती है, बस उस विकल्प को प्रदान करें। यह एक और अनुमति श्रेणी होने की आवश्यकता नहीं है क्योंकि यह एक ऐप को "पिन" करने के लिए उपयोगकर्ताओं का विवेक है। मैं नहीं चाहता कि कोई ऐप एक बार चलने के बाद स्थायी रूप से अजेय हो जाए। मैं बस ऐसा करने के लिए एक विकल्प चाहता हूं जब मेरे प्रश्न में वर्णित जैसा है वैसा ही एक आवश्यकता है।
सुपरटेनस्की

1
@onik एक बफर अतिप्रवाह स्मृति hogging के साथ कुछ नहीं करना है। क्या आप जानते हैं कि एक बफर अतिप्रवाह क्या है?

3
@onik तो उत्तर नहीं है, आप नहीं जानते कि एक बफर अतिप्रवाह क्या है। समझ गया।

1
@onik लिंक की गई सूची में एक अनंत लूप भी है जो निश्चित रूप से आपके द्वारा लूप किए जाने से बहुत पहले आपको एक OOM में चला सकता है Integer.MAX_VALUE। आपको क्या लगता है कि चीजें Integer.MAX_VALUEवैसे भी सीमित हैं ?

1
@onik सही: परिभाषा के अनुसार, एक बफर अतिप्रवाह आवंटित स्मृति आकार का विस्तार नहीं कर सकता है। यदि यह आवंटित स्मृति आकार का विस्तार करता है, तो यह बफर अतिप्रवाह नहीं है। आप एक अनंत लूप के बारे में सोच रहे हैं, मुझे लगता है।
मूविंग डक

1

नहीं। हालांकि, समस्या को कम करने के दो तरीके दिमाग में आते हैं, लेकिन दोनों को केवल डेवलपर द्वारा लागू किया जा सकता है: पहले एक अधिसूचना प्रदर्शित करना है, एंड्रॉइड ऐसे एप्लिकेशन देगा जो इसे दूसरों की तुलना में उच्च प्राथमिकता देते हैं। दूसरा समय शुरू करने के समय को बचाने के लिए है, जब टाइमर अंततः पुनरारंभ हो जाता है, तो इसे रीसेट नहीं किया जाएगा।


1
फोरग्राउंड प्राथमिकता के साथ बिना कारण के रनिंग ऐप्स (इसीलिए अधिसूचना की आवश्यकता है) को बुरा अभ्यास माना जाता है। जैसा कि पहले कहा गया है: एंड्रॉइड एक अच्छा एपी प्रदान करता है जो यहां तक ​​कि टाइमर / काउंटर भी अनुमति देता है जो ओओएम हत्यारा से प्रभावित नहीं होते हैं। इस विषय के बारे में डायने हैकॉर्न की एक अच्छी पोस्ट है
फ्लो

मुझे संदेह नहीं है कि इस तरह के एक एपीआई है, लेकिन इस प्रश्न में पहले कहां उल्लेख किया गया है?
एरिक

1
इसके अलावा, स्पष्ट रूप से इस ऐप को चालू रखने का एक कारण है यदि आप इस मामले में संभव हैं, तो आपके द्वारा पोस्ट किए गए गेम उदाहरण के विपरीत।
एरिक

4
नहीं, टाइमर की वजह से ऐप को चालू रखने का कोई कारण नहीं है। टाइमर जानकारी सहित बस ऐप स्टेट का उपयोग करें onSaveInstanceStateऔर onRestoreInstanceStateसुरक्षित करें। फोरग्राउंड में चलने की जरूरत नहीं। यहां तक ​​कि अगर यह एक अलार्म है तो आप AlarmManagerयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि इसे बाद में निष्पादित किया गया है। फ़ोरग्राउंड का उपयोग करने का एकमात्र कारण यह है: 1. आपके पास कुछ वास्तविक अग्रभूमि गतिविधि चल रही हैं, जैसे संगीत चलाना या वीडियो दिखाना। 2. आप एक डेटा कनेक्शन खुला रखना चाहते हैं (जैसे IMAP IDLE (पुश))।
फ्लो

0

पहली विधि: - यदि आप प्रोग्राम में स्टिकी थ्रेड बनाते हैं, तो हाँ आप अपने प्रोग्राम को बलपूर्वक चला सकते हैं। हालांकि याद रखें कि एडवांस सेटिंग मोड में यूजर बैकग्राउंड रनिंग एप्स को रोक सकता है। हालाँकि यदि आप चिपचिपे धागे को इस तरीके से लिखते हैं कि यह किसी भी घटना को शुरू करता है तो यह प्राप्त किया जा सकता है।

दूसरी विधि: यदि उपयोगकर्ता गैर-रूटेड एंड्रॉइड है और आप वें बैकग्राउंड पर एक ऐप चलाना चाहते हैं। अनुप्रयोग के रूप में पृष्ठभूमि में SL4 स्क्रिप्ट का उपयोग करें। एक स्क्रिप्ट का उपयोग करें जो आपको पृष्ठभूमि की जांच और कार्यक्रम करेगा और कुछ और दिखाने के लिए सामने का छोर लिखें।

उदा: अधिकांश गेम इंजनों में यह निर्मित होता है। भले ही उपयोगकर्ता ऐप बंद कर देता है, वे सर्वर एस से कनेक्ट होते हैं। कारण यह है कि इंजन फोन में कई स्क्रिप्ट बनाता है जो किसी विशेष घटनाओं पर रैंडमली चेक किया जाता है और यह कि आपके ऐप को लगातार अग्रभूमि की पृष्ठभूमि पर चलाने के लिए ट्राइगर का उपयोग किया जाता है।

*** TYPO के लिए क्षमा करें .. वर्तनी जाँचक उपलब्ध नहीं है। आशा है कि यू प्राप्त करने के लिए आप क्या चाहते हैं।


Android के उत्साही लोगों के लिए आपका स्वागत है, Android एंड-यूज़र्स के लिए एक प्रश्नोत्तर साइट। जहां तक ​​मैं समझ सकता हूं, आपके द्वारा प्रदान की गई 2 विधियां केवल डेवलपर-साइड से की जा सकती हैं, अर्थात जिनके पास एप्लिकेशन का स्रोत कोड है। दुर्भाग्य से, यह यहाँ अधिकांश पाठकों के लिए उपयोगी नहीं हो सकता है क्योंकि वे एक ऐप विकसित नहीं कर रहे हैं। यदि यह गैर-डेवलपर के लिए लागू हो सकता है, तो एप्लिकेशन के स्रोत कोड को छूने के बिना इन्हें कैसे करें, यह स्पष्ट करने के लिए उत्तर को संपादित करने पर विचार करें । धन्यवाद।
एंड्रयू टी

-1

ऐप को लॉक करने का विकल्प कभी-कभी होता है । यह फोन में उस एप्लिकेशन को मारने या रोकने से रोकता है।

ओएस में ही लॉक का विकल्प उपलब्ध नहीं है, गो टास्क मैनेजर जैसे कुछ 3 पार्टी ऐप का उपयोग करने से मदद मिल सकती है।


2
OOM की हत्या कर्नेल द्वारा की जाती है और कोई भी ऐप इसे प्रक्रिया को रोक या "लॉक" नहीं कर सकता है। आपके द्वारा जोड़ा गया ऐप एक टास्क किलर है जो खुद ऐप को मारता है। जिस लॉकिंग फीचर का आप जिक्र कर रहे हैं, वह केवल टास्क किलर द्वारा हत्या करने से रोकेगा।
एरिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.