首页 > 解决方案 > 如何从更新引擎服务获取更新状态?

问题描述

我想通过UpdateEngine 类使用更新引擎服务。

这个类允许我像这样绑定更新引擎服务:

updateEngine.bind(new UpdateEngineCallback() {
            @Override
            public void onStatusUpdate(int status, float v) {

            }

            @Override
            public void onPayloadApplicationComplete(int status) {

            }
        }, new Handler()) ;

绑定时需要知道服务的状态。UpdateEngine 类没有 getStatus() 之类的函数。

这个 onStatusUpdate 回调是否保证至少被调用一次,以便我们在第一次绑定到服务时可以知道状态?

标签: javaandroid

解决方案


我不知道对于特定版本的 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();
}

如果有更好的答案出现,我会选择它作为接受。


推荐阅读