2012-12-04 32 views
9

मैं एक एंड्रॉइड लॉन्चर (होम स्क्रीन प्रतिस्थापन) एप्लिकेशन विकसित कर रहा हूं और लो-मेमोरी स्थितियों में मारे गए लॉन्चर में चल रहा हूं। यह स्पष्ट रूप से महान नहीं है जब उपयोगकर्ता घर लौटाता है और इंतजार करना पड़ता है।एंड्रॉइड ऐप ओओएम (मेमोरी से बाहर) प्रक्रियाओं के लिए समायोजन प्राथमिकताओं

अपना शोध में, मैं पाया है कि एंड्रॉयड उच्चतम से न्यूनतम, कई प्राथमिकता समूहों में वर्गीकृत किया प्रक्रियाओं:

सिस्टम

लगातार

अग्रभूमि

दर्शनीय

अनुमानित

एक सेवा

होम

पिछला

बी सेवाएं

पृष्ठभूमि

आप को क्रियान्वित करते हुए जिसके तहत क्या गिरावट प्रक्रियाओं की जांच कर सकते हैं: adb shell dumpsys meminfo

सबसे व्यापक प्रलेखन मैं इस विषय पर पा सकता था: http://developer.android.com/guide/components/processes-and-threads.html#Lifecycle

हालांकि, यह ऊपर वर्णित सभी समूहों की एक स्पष्ट तस्वीर नहीं देता है। विशेष रूप से,

  1. प्रक्रिया को "अवधारणा" कैसे/कब माना जाता है? कुछ ऐप्स (जैसे कि Go Launcher EX), ऐसा लगता है कि अग्रभूमि में नहीं होने पर इस श्रेणी में कैसे रहना है। इस तरह, यह अक्सर के रूप में मारे नहीं जाता है। वे इसे कैसे कर रहे हैं?

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

  2. क्या "एक सेवा", "घर", और "बी सेवा" के बीच का अंतर है कि कैसे उस पर एक लांचर आवेदन के लिए

  3. किसी भी अन्य सामान्य सलाह? के अनुसार एक नियमित रूप से अनुप्रयोग की तुलना में अधिक प्राथमिकता प्राप्त कर सकते हैं? मुझे लगता है कि यह एक पूरी तरह से वैध उपयोगकर्ताओं के लिए यह देखते हुए कि एक लांचर विचार किया जाना चाहिए सबसे चीजों की तुलना में अधिक प्राथमिकता (वर्तमान अग्रभूमि गतिविधि को छोड़कर) का अनुरोध है।

+0

अच्छा सवाल! Dumpsys के लिए 1 जोड़ें। – herbertD

उत्तर

10

प्रश्न का उत्तर देने के लिए 1) और 3)
यदि आप logcat -b events हैं तो आप उन अनुप्रयोगों को प्राथमिकता से अवधारणात्मक रूप से देख सकते हैं, वास्तव में एक अधिसूचना बनाते हैं। लेकिन सभी गुण (यहां तक ​​कि सामग्री दृश्य) शून्य पर सेट है।
तो एक ही समस्या के लिए मेरे शोध पर मैं सिर्फ एक खाली अधिसूचना इसके साथ मेरी सेवा बना सकते हैं और शुरू करने की कोशिश:

startForeground(42, new Notification())

और देखा: logcat का कहना है:

I/notification_enqueue(1607): [my.testapp.TestApp,42,NULL,Notification(pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 kind=[null])] 

और dumpsys meminfo:

... 
17539 kB: Perceptible 
    ... 
    6164 kB: my.testapp.TestApp (pid 25573) 
... 

मुझे नहीं लगता कि यह इरादा है, और यह समझा जाना चाहिए कि यह केवल वास्तव में वास्तव में आवश्यक होने पर इस्तेमाल किया जाना चाहिए। मैं इसका उपयोग कर हर लुसी सेवा की कल्पना नहीं करना चाहता।

+2

उत्तर के लिए धन्यवाद! मैंने बस सबकुछ की पुष्टि की और यह काफी आश्चर्यजनक है ... मैं अब इस जवाब को इस डर में छिपाना चाहता हूं कि हर लुभावनी ऐप इसका उपयोग करने की कोशिश कर सकता है और एंड्रॉइड के मेमोरी मैनेजमेंट को पूरी तरह से बाईपास कर सकता है :-) – dubchoi

+0

मैं startForeground (0, अधिसूचना का उपयोग कर रहा था) और startForeground (1, अधिसूचित) का उपयोग कर मेरे लिए काम किया, कोड में क्या गलत था के बारे में पता लगाने के विचार के लिए धन्यवाद। मैंने कभी सोचा नहीं कि अधिसूचना आईडी को 1 या 42 में बदलना इतनी सारी चीज़ें बदलेगा – Diljeet

0

आपके द्वारा संदर्भित दस्तावेज़, आप दीर्घकालिक सेवा शुरू करने का प्रयास कर सकते हैं लॉन्चर में उच्च प्राथमिकता और किल टाइम्स प्रदर्शन की जांच करें।