2016-06-29 4 views
7

मेरे पास एक ऐप है जो बूट पर लॉन्च होने वाली एक सेवा है। मैं सिस्टम स्तर पर विकास कर रहा हूं, इसलिए मैं यह सुनिश्चित करने के लिए android:persistent=true का उपयोग कर रहा हूं ताकि मेरी सेवा स्मृति दबाव के तहत नहीं मारे जा सके।क्या "एंड्रॉइड: लगातार = सत्य" सिस्टम-स्तरीय ऐप को मारना संभव है?

हालांकि, मुझे लगता है कि यह मुझे शर्तों के तहत मेरी सेवा को मारने से रोकता है। मैं अभी भी इसे खुद को मारने में सक्षम होना चाहता हूं - क्या ऐसा करने का कोई तरीका है, या यह असंभव है क्योंकि "निरंतर = सत्य" को प्रकट में परिभाषित किया गया है?

यदि यह संभव नहीं है, तो मैं अपनी प्रक्रिया को स्मृति दबाव के तहत मरने से कैसे बचा सकता हूं? क्या मैं हाथ से प्राथमिकता परिभाषित कर सकता हूं? शायद oom_score या कुछ?

+0

क्या killBackgroundProcesses (packageName) काम करता है? – Memme

+0

कॉलिंग 'stopSelf()' सेवा बंद कर देता है। या क्या आपको वास्तव में _kill_ करने की ज़रूरत है? – ozbek

+0

@ ओज़बेक - मुझे कीमती 1 एमबी मेमोरी को बचाने के लिए प्रक्रिया को मारने की जरूरत है। –

उत्तर

3

यह पता लगाया। सेवा को रोकने के अधिकांश तरीके लगातार फ्लैग को पुनरारंभ करने से नहीं रोकेंगे। इसमें स्टॉप सेवा, killBackgroundService, और यहां तक ​​कि System.exit (0) भी शामिल है;

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

प्रकट में:

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" tools:ignore="ProtectedPermissions"></uses-permission> 

इस प्रक्रिया को मार डालेगा। इसे प्रक्रिया/पैकेज का नाम दें।

try { 
     Class c; 
     c = Class.forName("android.app.ActivityManager"); 
     Method m = c.getMethod("forceStopPackage", new Class[]{String.class}); 
     Object o = m.invoke(null, new Object[]{"com.your.process"}); 
    }catch (Exception e){ 
      Log.e(TAG, "Failed to kill service", e); 
} 
0
android:persistent=true 

वर्क्स प्रीलोडेड अनुप्रयोगों के लिए, (प्ले स्टोर से जैसे क्षुधा, apk या के रूप में से स्थापित) डाउनलोड किए गए एप्लिकेशन लिए काम नहीं करता सुझाव अग्रभूमि सेवा विधि का उपयोग करने के लिए - सर्वोच्च प्राथमिकता प्रक्रिया। Official example here, Another full-code example here

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