gpt4 book ai didi

android - 使用 JobScheduler/JobInfo 的显式唤醒锁

转载 作者:行者123 更新时间:2023-11-29 01:01:10 26 4
gpt4 key购买 nike

我正在重构这段代码:

https://github.com/r3gis3r/CSipSimple/blob/master/src/com/csipsimple/utils/TimerWrapper.java

它使用 AlarmManager 来安排计时器。我正在重构代码以使用 JobScheduler遵循 Google 的建议:

/**
* @param entryId
* @param latencyMs
* @brief Handler for schedule
*/
private synchronized int handleSchedule(int entryId, int latencyMs) {
// clamp to minimum latencyMs
latencyMs = (latencyMs < TIMER_MIN_LATENCY_MS) ? TIMER_MIN_LATENCY_MS : latencyMs;

// Cancel previous registrations for the entryId
mJobScheduler.cancel(entryId);
int existingReg = mScheduleEntries.indexOf(entryId);
if (existingReg != -1) {
mScheduleEntries.remove(existingReg);
mScheduleTimes.remove(existingReg);
}

long fireTimeMs = SystemClock.elapsedRealtime() + latencyMs;

Log.v(TAG, "Schedule timer " + entryId + " in " + latencyMs + "ms @ " + fireTimeMs);

ComponentName componentName = new ComponentName(mContext, PTAPITimerJobService.class);

PersistableBundle persistableBundle = new PersistableBundle();
persistableBundle.putInt(EXTRA_TIMER_ENTRY, entryId);
persistableBundle.putLong(EXTRA_TIMER_EXPIRATION, fireTimeMs);

final JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(entryId, componentName).setExtras(persistableBundle);
jobInfoBuilder.setMinimumLatency(latencyMs);

// TODO - set wakelock criteria
JobInfo jobInfo = jobInfoBuilder.build();
mJobScheduler.schedule(jobInfo);

mScheduleEntries.add(entryId);
mScheduleTimes.add(fireTimeMs);
return 1;
}

上述方法等同于 CSipSimple 粘贴链接中的 doSchedule。来自 JobInfo 的文档, 有像这样的方法:setRequiredNetworkType, setRequiresDeviceIdle 用于设置各种条件。

问题:在 JobInfo 中提及这些标准是否足够,或者我们需要管理一个明确的 WakeLock(如 AlarmManager 案例所示)?

定时器的唤醒锁类型:

public class WakeLockTypes {
public static final int LOCK_TYPE_NONE = 0x0;
public static final int LOCK_TYPE_WIFI = 0x1; // Keep the Wi-Fi radio awake
public static final int LOCK_TYPE_WIFI_MULTICAST = 0x2; // Allow receiving of Wifi Multicast packets
public static final int LOCK_TYPE_POWER_WAKE = 0x4; // Keeps the device CPU on
public static final int LOCK_TYPE_SCREEN_DIM_WAKE = 0x8; // Keeps the screen on (dim)

public static final int LOCK_TYPE_DEFAULT = (LOCK_TYPE_SCREEN_DIM_WAKE|LOCK_TYPE_WIFI);

}

最佳答案

JobScheduler 将在您的作业运行时让您的设备保持唤醒状态,因此您不需要自己的WakeLock

关于android - 使用 JobScheduler/JobInfo 的显式唤醒锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com