(FFOS Gecko & Gaia) IPC - 一种“猥琐的”IPC方式

    这几天在分析b2g中OTA部分的代码,记录一下settings与system app的IPC方式。

    说是“猥琐的”IPC方式,只是因为我没见过,呵呵,不过请教了同事,这种方式在b2g中还是比较常见的。

    简单的说,这种IPC方式是通过系统的preference来实现的,某一个preference是一个共享的媒介,在ProcessA中set一个preference,然后在ProcessB中监听这个preference,preference的值就当做是ProcessA传递给ProcessB的数据。

    结合代码看一下就明白了。

 

1. gaia/apps/settings/js/panels/about/update_check.js

  settings作为ProcessA,将'gaia.system.checkForUpdates'设置为true。

this._settings.createLock().set({
  'gaia.system.checkForUpdates': true
});

 

2. gaia/apps/system/js/update_manager.js

  system app作为ProcessB,监听‘gaia.system.checkForUpdates’的变化,如果变化的值为true,则进行下一步check。

SettingsListener.observe('gaia.system.checkForUpdates', false,
                               this.checkForUpdates.bind(this));
…………

checkForUpdates: function su_checkForUpdates(shouldCheck) {
  if (!shouldCheck) {
     return;
  }

  this._dispatchEvent('force-update-check');

  if (!this._settings) {
    return;
  }

  var lock = this._settings.createLock();
  lock.set({
    'gaia.system.checkForUpdates': false
  });
},

 

posted @ 2015-08-03 09:27  coding4范儿  阅读(230)  评论(0编辑  收藏  举报