Arkasında kod Durmaya zorla düğmesi karmaşık ve belgesiz olduğunu. Sözlü olarak çoğaltacağım ve daha sonra her seferinde tek bir parça üzerinden geçeceğim.
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);
}
}
İlk if
satır , paketin herhangi bir bileşeninin bir aygıt yöneticisi olup olmadığını kontrol eder (yani, Ayarlar uygulamasının Güvenlik sayfasındaki Aygıt yöneticileri listesinde işaretliyse ). Öyleyse, düğme devre dışı bırakılır (grileşmiş), bu nedenle aygıt yöneticilerini durduramazsınız.
Ardından, else if
paketin zaten durup durmadığını kontrol eder . Burada, durmak sadece "koşmamak" demek değildir. Bildiğim kadarıyla söyleyebilirim, bir paket içindedir durdu (örneğin menüden başlatarak gibi) ondan herhangi bir bileşeni çalıştırmak hiç olmasa devlet veya bir basılı ettiyseniz Durmaya zorla düğmesini (bu bir veya "Çalışmayı durdurdu" iletişim kutusu) ve bileşenlerinden hiçbirini yeniden çalıştırma. Paket halinde değil durdurulmuş, düğme edilir etkin .
else
Dava bir uygulama nadir olasılığa kapsayan etti durdu ve bir cihaz yönetim değil edilmiştir. Bu durumda, diğer sistem hizmetlerine düğmeyi etkinleştirme şansı verir . Örneğin, uygulamanın bir alarmı ayarlanmış ve beklemede olabilir, bu daha sonra uygulamanın durdurulmuş durumdan bile tekrar başlatılmasına neden olur. Bu durumda, düğme etkinleştirilecektir. Başka hiçbir sistem servisinin düğmeyi etkinleştirmek için bir nedeni yoksa, devre dışı bırakılır.
özet
Durmaya zorla paketinde bir cihaz yönetim değilse düğme etkindir ve ya zaten bu uygulamayı-durmuş zorla değil ya bunu zorla durdurdu ama bir sistem hizmeti yeniden çalıştırmak düşünüyor var.
Uygulama çalışıyorsa (ve bir aygıt yöneticisi değilse), Zorla durdur düğmesi kesinlikle etkin olacaktır, ancak etkin olan düğme uygulamanın çalıştığı anlamına gelmez.
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out
, Bu davranışa sahip bir örnek uygulama verebilir misiniz? Sadece bazı uygulamalarımı gözden geçirdim ve hem "Zorla Durdur" hem de "Kaldır" düğmelerinin etkin olduğunu gördüm. Android 4.4.2'leyim.