java - 如何从更新引擎服务获取更新状态?
问题描述
我想通过UpdateEngine 类使用更新引擎服务。
这个类允许我像这样绑定更新引擎服务:
updateEngine.bind(new UpdateEngineCallback() {
@Override
public void onStatusUpdate(int status, float v) {
}
@Override
public void onPayloadApplicationComplete(int status) {
}
}, new Handler()) ;
绑定时需要知道服务的状态。UpdateEngine 类没有 getStatus() 之类的函数。
这个 onStatusUpdate 回调是否保证至少被调用一次,以便我们在第一次绑定到服务时可以知道状态?
解决方案
我不知道对于特定版本的 Android 是否有保证,但是查看这个源代码,似乎它至少调用了一次 onStatusUpdate 函数,除非到目前为止没有尝试更新。
Status BinderUpdateEngineAndroidService::bind(
const android::sp<IUpdateEngineCallback>& callback, bool* return_value) {
callbacks_.emplace_back(callback);
const android::sp<IBinder>& callback_binder =
IUpdateEngineCallback::asBinder(callback);
auto binder_wrapper = android::BinderWrapper::Get();
binder_wrapper->RegisterForDeathNotifications(
callback_binder,
base::Bind(
base::IgnoreResult(&BinderUpdateEngineAndroidService::UnbindCallback),
base::Unretained(this),
base::Unretained(callback_binder.get())));
// Send an status update on connection (except when no update sent so far),
// since the status update is oneway and we don't need to wait for the
// response.
if (last_status_ != -1)
callback->onStatusUpdate(last_status_, last_progress_);
*return_value = true;
return Status::ok();
}
如果有更好的答案出现,我会选择它作为接受。
推荐阅读
- node.js - TypeError:无法读取未定义的属性“RichEmbed”
- python - 我无法使用 Python 将名称中包含空格的文件上传到 Google Cloud Storage。我究竟做错了什么?
- python - 如何使用 python 编写指向 CSV 文件的超链接?
- python - CNN 培训时间过长(小时)
- flutter - 将 curl 获取请求转换为 dart 请求
- angular - 检查联系电话和电子邮件是否是假的?
- firefox - Rust 不接受来自本地消息传递的标准输入的输入 - firefox
- javascript - 如何在 Duktape 中实现非阻塞事件循环?
- laravel - Laravel 根据时间戳更新数据库字段
- c - 矩阵乘法不适用于 C 中大于外部的内部维度