2016-02-11 9 views
11

कुछ ऐप्स में से एक में Kitkat Samsung डिवाइसों में एक गंभीर गतिविधि मनोरंजन समस्या है। चित्र लेने पर समस्या अधिक बार दिखाई देती है, और यह आधा रैम के साथ क्रैपी Jellybean Samsung एस में नहीं देखा जाता है। लॉग कम स्मृति स्थिति दिखाते हैं, हालांकि OutOfMemoryException एस फेंक रहे हैं। मुझे लगता है कि Kitkat में एक और आक्रामक गतिविधि समापन नीति है (या फिर डिफ़ॉल्ट कैमरा ऐप रिसाव है)।कैमरे को एक अलग प्रक्रिया में खोलना

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

मुझे पता है कि मैनिफेस्ट में process विशेषता का उपयोग करके अपनी प्रक्रिया में एक सेवा शुरू करना संभव है। मान लें कि Activities के लिए कोई समकक्ष विशेषता मौजूद नहीं है, अगर मैंने अपनी प्रक्रिया में प्रॉक्सी सेवा शुरू की है और फिर इस सेवा से एक गतिविधि शुरू की है, तो क्या इस प्रक्रिया में गतिविधि भी चलती है?

+0

@ ओनिक वेल, वे पैराग्राफ पृष्ठभूमि हैं। हो सकता है कि वहां कोई ऐसा व्यक्ति है जो ओएस मेमोरी प्रबंधन को गहराई से जानता है और मुझे यह समझने में मदद कर सकता है कि क्या हो रहा है। मुझे लॉलीपॉप मेमोरी लीक समस्या, और वेबव्यू रिसाव के बारे में भी पता है, लेकिन AFAIK ये अद्यतन वेबव्यू के साथ किटकैट्स में लागू नहीं होते हैं। –

+0

गतिविधियां भी अपनी प्रक्रियाओं में लॉन्च की जा सकती हैं http://developer.android.com/guide/topics/manifest/activity-element.html#proc – nandeesh

+1

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

उत्तर

2

व्यवहार वर्णित पूरी तरह से Application fundamentals प्रलेखन जहाँ से यह स्पष्ट है कि "एक अलग प्रक्रिया में कैमरा खोलना" आप में मदद नहीं करेगा, सिर्फ इसलिए कि यह है कि क्या पहले से ही डिफ़ॉल्ट रूप से होता है के साथ सहमत हो गया है:

जब सिस्टम एक घटक शुरू करता है, तो यह उस ऐप की प्रक्रिया शुरू करता है (यदि यह पहले से चल रहा नहीं है) और घटक के लिए आवश्यक कक्षाओं को तुरंत चालू करता है। उदाहरण के लिए, यदि आपका ऐप कैमरा एप में गतिविधि शुरू करता है जो एक फोटो कैप्चर करता है, तो वह गतिविधि उस प्रक्रिया में चलती है जो कैमरा ऐप से संबंधित है, न कि आपके ऐप की प्रक्रिया में।

तो जब कैमरा एप्लिकेशन को अग्रभाग में लाया जाता है, अपने अनुप्रयोग पृष्ठभूमि है, जो यह उम्मीदवारों में से एक प्रणाली द्वारा मारे जाने के लिए जब यह प्रति Processes and Application Life Cycle के रूप में स्मृति कम है बनाता है को जाता है। आप एक सामान्य ओएस के व्यवहार को देख रहे हैं। रैम की कुल राशि एक महत्वपूर्ण बिंदु नहीं है। अग्रभूमि मामलों में प्रक्रिया के लिए उपलब्ध राशि की मुफ्त मेमोरी।

इसके साथ, आपके प्रश्न का उत्तर नहीं है। कोई भी Activity एप्लिकेशन (प्रक्रिया) के भीतर शुरू होता है और चलाता है जिसे मूल रूप से मैनिफेस्ट फ़ाइल के माध्यम से घोषित किया गया था, इससे कोई फर्क नहीं पड़ता कि प्रारंभिक प्रक्रिया किस प्रक्रिया से आती है।

आदेश

adb shell ps | grep 'app_name' 

आप जो संसाधित करता है अपने और कैमरा एप्लिकेशन पर चल रहे हैं बता देंगे।

दो क्षुधा हालांकि एक ही प्रक्रिया में चला सकते हैं, लेकिन इस के लिए आवश्यक शर्त क्षुधा का एक ही हस्ताक्षर ... Application fundamentals से है:

यह दो क्षुधा एक ही साझा करने के लिए व्यवस्था करने के लिए संभव है लिनक्स उपयोगकर्ता आईडी ... एक ही उपयोगकर्ता आईडी वाले ऐप्स एक ही लिनक्स प्रक्रिया में चलाने की व्यवस्था कर सकते हैं और उसी वीएम को साझा कर सकते हैं (ऐप्स को उसी प्रमाणपत्र के साथ भी हस्ताक्षर किया जाना चाहिए)।

+0

[इस डेवलपर गाइड] के अनुसार (http://developer.android.com/guide/components/processes-and-threads.html#Processes) गतिविधियों के लिए 'android: process' का उपयोग करना भी संभव है। –

+0

सही। जबकि आप अपने ऐप के भीतर विशेषता का उपयोग कर सकते हैं, आप इसे कैमरे ऐप के लिए नहीं बदल सकते हैं, इसलिए कोई फर्क नहीं पड़ता कि आपके द्वारा सेट की गई 'प्रक्रिया' का मूल्य क्या है, कैमरा ऐप 'गतिविधि' एक अलग प्रक्रिया में चल रहा है (डिफ़ॉल्ट नाम अगर विशेषता प्रकट में सेट नहीं किया गया था)। – Onik

+0

मैं देखता हूं। हालांकि यह SurfaceHolder में स्थित आंतरिक कैमरा गतिविधियों के लिए उपयोगी हो सकता है। –

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