在打模式下通过警报关闭应用程序

时间:2018-11-22 11:28:14

标签: java android

我正在尝试解决奇怪的问题。该设备仅适用于我的应用程序。应用程序始终处于打开状态。每天晚上我的申请都应该关闭。我为不同的SDK情况添加了警报,并且可以正常工作:

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

if (SDK_INT < Build.VERSION_CODES.KITKAT)
    alarmManager.set(AlarmManager.RTC, time, pendingIntent);
else if (SDK_INT < Build.VERSION_CODES.M)
    alarmManager.setExact(AlarmManager.RTC, time, pendingIntent);
else
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC, time, pendingIntent);

在警报接收器上,我尝试终止应用程序:

android.os.Process.killProcess(android.os.Process.myPid());
System.exit(0);

在最终应用程序中,仅当平板电脑不睡觉时才会关闭。当平板电脑处于打ze模式时,应用程序将被终止并立即启动application.class,然后将重新启动应用程序。平板电脑24的SDK。警报正常工作-我检查了一下。

所以...我在哪里错了?我在killProcess中有问题吗?为什么平板电脑不睡觉时应用会被杀死,而平板电脑睡觉时却无法正常工作?

1 个答案:

答案 0 :(得分:0)

几个小时后,我终于找到了解决方法。 KillProcess 在某些情况下可以重新启动应用程序-这是已知错误。就我而言,我发生在睡眠(打)模式。因此,如果您想终止应用程序,则应使用finish()。我用恒定的创建方法创建了一个特殊的 ShutdownActivity 。我不能给你完整的代码,但是我可以。

使用以下标志开始活动:

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK  | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_ANIMATION);

在您完成活动的创建方法中中断它:

if(android.os.Build.VERSION.SDK_INT >= 21)
    finishAndRemoveTask();
else
    finish();

android.os.Process.killProcess(Process.myPid()); // it can be system.exit(0) too