รหัสที่อยู่เบื้องหลังกองกำลังหยุดปุ่มมีความซับซ้อนและไม่มีเอกสาร ฉันจะทำซ้ำมันเป็นคำต่อคำและจากนั้นผ่านมันทีละชิ้น
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
กรณีครอบคลุมเหตุการณ์ที่หายากที่แอปได้รับการหยุดและไม่ได้เป็นผู้ดูแลอุปกรณ์ ในกรณีนี้จะเปิดโอกาสให้บริการระบบอื่น ๆเพื่อเปิดใช้งานปุ่ม ตัวอย่างเช่นแอปอาจมีชุดสัญญาณเตือนและรอดำเนินการซึ่งจะทำให้แอปเริ่มต้นอีกครั้งแม้จะอยู่ในสถานะหยุดทำงาน ในกรณีนี้ปุ่มจะเปิดใช้งาน หากไม่มีบริการระบบอื่นมีเหตุผลในการเปิดใช้งานปุ่มจะเป็นการปิดใช้งาน
สรุป
บังคับให้หยุดปุ่มเปิดใช้งานถ้าแพคเกจไม่ได้เป็นผู้ดูแลอุปกรณ์และทั้งที่คุณยังไม่ได้บังคับหยุด app นี้หรือคุณไม่ได้บังคับให้หยุด แต่บริการระบบคิดว่ามันจะทำงานอีกครั้ง
หากแอปกำลังทำงานอยู่ (และไม่ใช่ผู้ดูแลอุปกรณ์) ปุ่มบังคับให้หยุดทำงานจะเปิดใช้งานอย่างแน่นอน แต่ปุ่มที่เปิดใช้งานไม่ได้หมายความว่าแอปกำลังทำงานอยู่
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out
คุณสามารถให้แอปตัวอย่างที่มีพฤติกรรมนี้ได้หรือไม่ ฉันอ่านผ่านแอพบางตัวของฉันและพบว่ามีการเปิดใช้งานทั้งปุ่ม "บังคับหยุด" และ "ถอนการติดตั้ง" ฉันใช้ Android 4.4.2