我正在研究需要独立于活动/片段每60 * 1000毫秒在前台和后台调用一些api的代码。
我尝试使用处理程序和其他各种解决方案,例如作业调度程序等。当设备连接到电源或设备屏幕唤醒时,我的解决方案工作正常,但是当设备被锁定时,它无法正常工作。目前,我在应用程序类中使用以下提到的逻辑
Handler minuteHandler = new Handler();
minuteHandler.postDelayed(runnable, 60*1000);
final Runnable runnable = new Runnable() {
@Override
public void run() {
// method to call api
minuteHandler.removeCallbacks(runnable);
minuteHandler.postDelayed(runnable, 60*1000);
}
};
该解决方案很简单,因为我需要每60 * 1000毫秒调用一次api,而在长达8到10个小时的时间内不延迟数毫秒,直到应用被销毁为止。
答案 0 :(得分:1)
一种选择是使用wake lock。这是文档中的示例:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
这可以防止屏幕锁定
或者您可以在Activity
中将AndroidManifest
用于@model MyModelType
<label class="control-label">@Model.FieldName</label>
<input asp-for="EmployeeName" class="form-control" />
来源:android:keepScreenOn