The kode belakang berhenti Angkatan tombol kompleks dan tidak berdokumen. Saya akan mereproduksinya kata demi kata dan kemudian memeriksanya satu per satu.
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);
}
}
Baris pertama if
memeriksa apakah ada komponen paket yang merupakan admin perangkat (yaitu, jika diperiksa dalam daftar Administrator perangkat di halaman Keamanan aplikasi Pengaturan ). Jika demikian, tombol dinonaktifkan (berwarna abu-abu) sehingga Anda tidak dapat menghentikan admin perangkat.
Kemudian, else if
cek apakah paket tersebut sudah berhenti . Di sini, berhenti tidak hanya berarti "tidak berjalan". Sejauh yang saya tahu, paket dalam keadaan berhenti jika Anda tidak pernah menjalankan komponen apa pun darinya (seperti dengan meluncurkannya dari menu), atau jika Anda telah menekan tombol Force stop (yang ini atau dalam dialog "berhenti bekerja") dan tidak menjalankan komponennya lagi. Jika paket belum dihentikan, tombol ini diaktifkan .
The else
kasus mencakup kemungkinan langka yang aplikasi telah dihentikan dan bukan merupakan admin perangkat. Dalam hal ini, ini memberi layanan sistem lain kesempatan untuk mengaktifkan tombol. Misalnya, aplikasi mungkin memiliki set alarm dan pending, yang nantinya akan menyebabkan aplikasi untuk memulai kembali bahkan dari keadaan berhenti. Dalam hal ini, tombol akan diaktifkan. Jika tidak ada layanan sistem lain yang memiliki alasan untuk mengaktifkan tombol, itu akan dinonaktifkan.
Ringkasan
Tombol Force stop diaktifkan jika paket tersebut bukan admin perangkat dan Anda belum menghentikan paksa aplikasi ini atau menghentikannya secara paksa tetapi layanan sistem berpikir itu akan menjalankannya lagi.
Jika aplikasi sedang berjalan (dan itu bukan admin perangkat), tombol Force stop pasti akan diaktifkan, tetapi tombol yang diaktifkan tidak berarti aplikasi sedang berjalan.
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out
, dapatkah Anda memberikan contoh aplikasi yang memiliki perilaku ini? Saya baru saja membaca beberapa aplikasi saya dan menemukan bahwa kedua tombol "Force Stop" dan "Uninstall" diaktifkan. Saya menggunakan Android 4.4.2.