【发布时间】:2021-02-11 18:02:37
【问题描述】:
在试图找出为什么我的 android 应用程序 (java) 在启动后的前 2-3 秒内没有响应(UI 元素已加载,除了菜单选项,但我无法单击任何内容),我发现了延迟是由使用 JobScheduler 调度任务的命令引起的。
基本上我有一个App 和extends Application 的类,并且在那里我使用 JobScheduler 设置了一个任务,该任务将每 30 分钟运行一次并执行一些操作(更新一些信息并在其值发生更改时提供通知)。
在创建包含该任务所有详细信息的 Builder 后,我运行命令 scheduler.schedule(info) 并通过将其注释掉,我发现这是我的应用在启动后 2-3 秒无响应的原因。
private void scheduleJob() {
ComponentName componentName = new ComponentName(this, myRecurringTask.class);
JobInfo info = new JobInfo.Builder(JOB_ID, componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPersisted(true)
.setPeriodic(1800000)
.build();
JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
scheduler.schedule(info);
}
我已经尝试在线程中运行它,希望它能够在后台运行并且在运行时不会冻结 UI,以及其他类似的做法,但我还没有设法在后台运行它并且不会影响 UI响应能力。
我怀疑 App 类的生命周期可能是导致该问题的原因,但我没有足够的经验来确定它,或者知道如何克服它。 有没有人遇到过类似的问题?如果是这样,您是如何解决的?
谢谢
2020 年 2 月 18 日更新: 作为一种解决方法,我现在首先检查作业是否已安排好,如果不是,我会继续重新安排。 当我写调度部分时,我在文档中看到如果它已经存在它会覆盖作业,所以我并不担心它,但由于它会影响应用程序的性能,所以不要每次都这样做是有意义的。
话虽如此,我仍在寻找更好的解决方案,这只是一种限制冻结时间的解决方法,每次安排作业时 UI 仍会冻结。
【问题讨论】:
标签: android delay android-jobscheduler