फोर्स स्टॉप बटन के पीछे का कोड जटिल और अनिर्दिष्ट है। मैं इसे शब्दशः पुन: पेश करता हूँ और फिर एक बार में एक टुकड़ा से गुजरता हूँ।
private void checkForceStop() {
if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
// User can't force stop device admin.
updateForceStopButton(false);
} else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
// If the app isn't explicitly stopped, then always show the
// force stop button.
updateForceStopButton(true);
} else {
Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
Uri.fromParts("package", mAppEntry.info.packageName, null));
intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
Activity.RESULT_CANCELED, null, null);
}
}
पहली if
पंक्ति यह जांचती है कि क्या पैकेज का कोई घटक डिवाइस व्यवस्थापक है (यदि यह सेटिंग ऐप के सुरक्षा पृष्ठ में डिवाइस प्रशासक सूची में जाँच की गई है )। यदि हां, तो बटन अक्षम है (बाहर निकाल दिया गया है) ताकि आप डिवाइस के प्रवेश को रोक न सकें।
फिर, else if
जाँच करता है कि पैकेज पहले से ही बंद है या नहीं । यहाँ, रुकने का मतलब सिर्फ "भागना नहीं" है। जहाँ तक मैं बता सकता हूँ, एक पैकेज रुकी हुई अवस्था में है यदि आपने कभी भी इससे कोई घटक नहीं चलाया है (जैसे कि इसे मेनू से लॉन्च करके), या यदि आपने फ़ोर्स स्टॉप बटन दबाया है (यह एक या एक है) एक "काम करना बंद कर दिया" संवाद) और इसके किसी भी घटक को फिर से न चलाएं। यदि पैकेज बंद नहीं किया गया है, तो बटन सक्षम है ।
यह else
मामला उस दुर्लभ घटना को कवर करता है जिसे एक ऐप ने रोक दिया है और वह डिवाइस एडमिन नहीं है। इस मामले में, यह अन्य सिस्टम सेवाओं को बटन को सक्षम करने का मौका देता है । उदाहरण के लिए, ऐप में अलार्म सेट और लंबित हो सकता है, जो बाद में ऐप को फिर से बंद अवस्था से भी शुरू करने का कारण होगा। इस स्थिति में, बटन सक्षम हो जाएगा। यदि किसी अन्य सिस्टम सेवा में बटन को सक्षम करने का कोई कारण नहीं है, तो इसे अक्षम कर दिया जाएगा।
सारांश
बलपूर्वक बंद करें यदि पैकेज उपकरण व्यवस्थापक नहीं है बटन सक्षम किया गया है और या तो आप नहीं पहले से ही इस एप्लिकेशन से बलपूर्वक-बंद कर दिया है या आप इसे बल-बंद कर दिया लेकिन एक प्रणाली सेवा सोचता है कि यह इसे फिर से चलाने होगा।
यदि एप्लिकेशन चल रहा है (और यह डिवाइस व्यवस्थापक नहीं है), तो फोर्स स्टॉप बटन निश्चित रूप से सक्षम हो जाएगा, लेकिन सक्षम किया जा रहा बटन का मतलब यह नहीं है कि ऐप चल रहा है।
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out
, क्या आप एक उदाहरण ऐप दे सकते हैं जिसमें यह व्यवहार है? मैंने अपने कुछ ऐप के माध्यम से स्किम किया और पाया कि "फोर्स स्टॉप" और "अनइंस्टॉल" दोनों बटन सक्रिय हैं। मैं एंड्रॉइड 4.4.2 पर हूं।