Android 中的闹钟在经过几个小时后停止

2024-02-26

我正在制作一个需要重复执行某些任务的应用程序,通常需要 1 到 5 分钟。

我努力了.setRepeating, setInexactRepeating and .set(最后一个任务完成后重新设置闹钟)

当警报响起时,服务就会启动。

通常情况下效果很好,但有时无论我使用什么方法,警报都会突然停止。

我已经在Android 5.1和4.4.2中进行了测试。

为什么会发生这种情况?这是一个已知的错误还是什么?

这是我用来设置闹钟的方法,注释的代码是我尝试过的另一种方法:

public void setAlarm(Context context) {
    alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

    /*alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis() + 1000,
            PreferenceHelper.readLong(PreferenceHelper.PREF_TIME_TO_REFRESH), alarmIntent);*/
    alarmMgr.set(AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis() + PreferenceHelper.readLong(PreferenceHelper.PREF_TIME_TO_REFRESH), alarmIntent);

    ComponentName receiver = new ComponentName(context, BootReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

正如我之前所说,如果我使用.set当服务完成分配的任务时,我再次调用该方法。 (这也有效,但几个小时后警报突然停止响)。

public class AlarmReceiver extends WakefulBroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent service = new Intent(context, WifiCheckerService.class);
    startWakefulService(context, service);
}

我实际上遇到了同样的问题,并希望转移到 SyncAdapter,但还有其他问题。所以不建议这会解决你的问题。

问题根本不在于警报管理器。我的应用程序针对 API > 23 并使用 API 24 手机进行测试,但仍然遇到此问题。问题是,一些制造商正在 Android 之上创建自己的应用程序管理器,这会因资源/电池原因而终止您的应用程序,从而阻止您的应用程序以及与其关联的任何警报触发。

查看这篇文章以检查应用程序是否处于停止模式。Android AlarmManager 在 Activity 终止时停止 https://stackoverflow.com/questions/31037720/android-alarmmanager-stops-when-activity-die/31254878

我注意到在某些手机上不会发生这种情况,而在某些手机上却会发生......

如果这是错误的,并且您确实发现了实际问题所在,请告诉我,因为同步适配器正在杀了我......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中的闹钟在经过几个小时后停止 的相关文章

随机推荐