뒤에서 코드를 강제 종료 버튼이 복잡하고 문서화되지 않은 것입니다. 나는 그것을 그대로 표현한 다음 한 번에 한 조각 씩 살펴 보겠습니다.
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
,이 동작이있는 예제 앱을 제공 할 수 있습니까? 방금 일부 앱을 살펴본 결과 "강제 중지"및 "제거"버튼이 모두 활성화 된 것을 발견했습니다. Android 4.4.2에 있습니다.