【问题标题】:Android Background service before API 21API 21 之前的 Android 后台服务
【发布时间】:2017-09-05 00:19:43
【问题描述】:

我正在尝试在 Android 中执行周期性后台计时器。

以下代码从服务中执行并使用 minSdk=21

@Override
public int onStartCommand(Intent i, int flags, int startId) {   
    Intent intent = new Intent(this, TestReceiver.class);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000, 60000, alarmIntent);
    return START_STICKY;
}

和接收者

@Override
public void onReceive(Context arg0, Intent arg1) {
    Log.i("TAG", "Tick: "+System.currentTimeMillis()+ " "+new Date());
}

但如果我尝试使用 min sdk

任何提示?

【问题讨论】:

    标签: android


    【解决方案1】:

    我建议将setExact 用于 API>19 和 set

    对于较新的版本setAndAllowWhileIdle

    重复方法不提供此类功能。

    不要忘记使用 WakefullBroadcastReceiver

    【讨论】:

      【解决方案2】:

      我在旧代码中看到的一种方法是在 onCreate 内部调用 startCommand。这两种方法都调用onStartCommand,但这样做似乎使它“更粘”。几个月前我提出了一个关于冗余电话的问题,并得到了this answer。我不能说这会解决您的具体问题,但可能值得一试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        • 2023-03-03
        • 2011-09-15
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多