Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法显式销毁DevicePolicyManager_Android_Memory Leaks_Device Admin_Low Memory - Fatal编程技术网

Android 无法显式销毁DevicePolicyManager

Android 无法显式销毁DevicePolicyManager,android,memory-leaks,device-admin,low-memory,Android,Memory Leaks,Device Admin,Low Memory,在检查是否应提示用户在设备上启用DeviceAdmin后,我正在活动中启动DevicePolicyManager 如果用户单击 “激活按钮”,将启用设备管理员 如果用户单击 “取消”按钮,用户将看到一个对话框,“您需要激活设备上的设备管理员才能继续应用程序”。单击此对话框上的“确定”,我们将退出应用程序 这在任何设备上都能正常工作。但是,当从设置部分在设备上启用“不保留活动”时,如果用户选择“取消”DeviceAdmin激活提示,则上述行为会发生变化。当用户单击提示上的“取消”时,将重新启动in

在检查是否应提示用户在设备上启用DeviceAdmin后,我正在活动中启动DevicePolicyManager

如果用户单击 “激活按钮”,将启用设备管理员

如果用户单击 “取消”按钮,用户将看到一个对话框,“您需要激活设备上的设备管理员才能继续应用程序”。单击此对话框上的“确定”,我们将退出应用程序


这在任何设备上都能正常工作。但是,当从设置部分在设备上启用“不保留活动”时,如果用户选择“取消”DeviceAdmin激活提示,则上述行为会发生变化。当用户单击提示上的“取消”时,将重新启动intent DevicePolicyManager,而不显示对话框-“您需要在设备上激活设备管理员才能继续应用程序”。有人知道为什么会这样吗

您应该在应用程序中编写的此类, 如果您启用或禁用DPM,则会收到此消息,因此当您在onDisable中收到此消息时,您可以通知用户

public class DeviceAdmin extends DeviceAdminReceiver {

static SharedPreferences getSamplePreferences(Context context) {
    return context.getSharedPreferences(DeviceAdminReceiver.class.getName(), 0);
}

void showToast(Context context, CharSequence msg) {
    Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}

@Override
public void onEnabled(Context context, Intent intent) {
  //  showToast(context, "Device Admin: enabled");
}

@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
    //return "This is an optional message to warn the user about disabling.";
    return null;
}

@Override
public void onDisabled(Context context, Intent intent) {
  //  showToast(context, "Device Admin: disabled");
}

}
现在,您将使用一些活动启动DPM 因此,在onActivityResult中,您将在单击“取消”按钮或“激活”按钮的位置收到结果代码 使用以上代码,您可以检查DPM是否已激活或已取消(如果已取消),然后使用警报通知用户,在警报中只给出一个“确定”按钮,然后单击该按钮完成活动 我认为这应该行得通,如果不行,请告知问题:) 快乐编码

启用“不保留活动”时:显示设备管理活动后,您的主要活动即告完成

取消“设备管理”后,将恢复上一个活动:
onCreate
,并将其保存状态作为参数调用


我猜您没有在此捆绑包中保存任何内容,因此您的活动具有与第一次启动时相同的行为。

从我的活动启动DPM时,我已在ActivityResulty上添加了一个签入以获取DPM状态。这没有问题。但当我得到DPM未激活的状态时,我会向用户显示一个对话框,以通知DPM状态。它在正常情况下工作正常。如果启用了“不保留活动”,则单击DPM提示符上的“取消”,对话框警报不会显示,但DPM提示符会继续显示。谢谢,但我也尝试过了。。。当设备管理被取消时,在“活动结果”中,我已将deviceadmin的状态保存在捆绑包中。在oncreate中,我检查了bundle是否在变量中存储了deviceadmin状态的值。变量具有预期值,即deviceadmin的取消状态。所以在检索这个值时,我尝试显示对话框。但泄漏就出现在这一点上。活动似乎已重新启动,但尚未准备好在logcat中显示对话框。我发现此错误:活动已泄漏窗口com.android.internal.policy.impl.PhoneWindow$DecorView@46029dd0如果我检查了这个,那么在活动结果中你会收到什么?如果我取消设备管理,我会得到结果代码!=Activity.RESULT\u OK