从WorkManager的Work/WorkInfo中获取最后更新时间

4
有没有一种方法可以获得完成或成功工作的时间戳呢? WorkManager.getInstance().getWorkInfosByTagLiveData(groupId) 这段代码会返回 WorkInfo
我相信 WorkManager 有管理 Work 的时间戳,但是如何获取呢?

为什么不在doWork()方法的结尾自己写入时间戳,然后使用它呢?或者,如果内存数据结构对您的需求足够好,甚至可以写入一些内存中的数据结构。 - Enselic
1
因为我认为WorkManager API应该负责工作信息,而不是我的上传实体。如果WorkManager没有这样的可能性-那么是的。 - Kyryl Zotov
1个回答

2
我正在检查位于/data/data/com.example/databasesandroidx.work.workdb文件。在WorkManager 2.2.0中,WorkSpec表中存在以下列:
  • id(例如dbe0dcd0-ab76-4c1e-a963-be2135f41c3c)
  • state(例如2)
  • worker_class_name(例如com.example.MyWorker)
  • input_merger_class_name(大多数情况下为空,但也可以是androidx.work.OverwritingInputMerger
  • input
  • output
  • initial_delay(例如300000)
  • interval_duration(例如900000)
  • flex_duration(例如900000)
  • run_attempt_count(例如1)
  • backoff_policy(例如0)
  • backoff_delay_duration(例如30000)
  • period_start_time(例如1578901635581)
  • num_retention_duration(例如0)
  • schedule_requested_at(例如1578901635601)
  • required_network_type(例如1)
  • requires_charging(例如0)
  • requires_device_idle(例如0)
  • requires_battery_not_low(例如1)
  • requires_storage_not_low(例如0)
  • trigger_content_update_delay(例如-1)
  • trigger_max_content_delay(例如-1)
  • content_uri_triggers
可以推断出,不存在一个字段,用于反映特定工作已完成的时间戳,因为据我所知,WorkManager不需要该字段。
因此,在工作成功完成后,您唯一的选择是手动使用共享首选项或另一个SQLite表保存时间戳。

period_start_time(例如1578901635581)看起来像是时间戳毫秒级别的时间戳,是否可以通过代码进行解析?或者它有不同的含义? - Kyryl Zotov
你对工作的成功完成时间感兴趣,是吗? 如果是这样,想必 period_start_time 对你会有多大的帮助。 - azizbekian
我明白了,但是有没有办法访问这个变量“period_start_time”? - Kyryl Zotov
1
我的猜测是,您需要使用SqliteOpenHelper来打开特定的db文件(位于/database/下),但此时我不确定如何在代码上实现。需要进行一些调查。 - azizbekian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接