成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解MeeGo Touch服務框架

移動開發
本文講述了MeeGo Touch服務框架,這個服務框架是這樣的一種IPC機制,這個機制允許應用單元簡便地使用或者服務于一個接口。在這個文檔,用為“使用者”,而提供者進程接口被稱為“提供者”。

諾基亞宣稱MeeGo比Android更具開放性:MeeGo基于Linux的平臺、可以驅動多種計算設備,包括手機、上網本、平板電腦、連接電視和車載信息娛樂系統。事實真的是如此嗎?我們先了解一下MeeGo Touch服務框架。

51CTO推薦專題:MeeGo:無所不在的移動操作系統

戶進程接口被稱這個服務框架是這樣的一種IPC機制,這個機制允許應用單元簡便地使用或者服務于一個接口。在這個文檔,用為“使用者”,而提供者進程接口被稱為“提供者”。

這個服務框架的目的如下:

◆提供一個可簡單使用的IPC機制

◆確保在服務的使用者和提供者之間沒有運行時二進制依賴關系

◆允許用戶在使用一個接口時不用擔心選擇或者連接到一個接口時的具體邏輯

◆允許用戶能查詢提供者的列表,并且能從中選擇一個

基本的服務機制

下圖展示了當一個服務端的用戶(SU)使用一個接口(IF)時將發生什么.

MeeGo tuch架構
MeeGo touch架構

◆服務端使用者舉例,一個接口去請求服務映射器給出實現那個接口的服務提供者的名稱

◆這個服務器映射器維護著一張服務和接口之間的映射關系表(通過查看dbus服務目錄,通常為/usr/share/dbus-1/services這個目錄)同時服務器映射器還有一套選擇服務的規則.它選擇一個服務,然后將服務的名稱返回給SU的接口.               

◆SU的接口接著創建一個正當的dbus連接到一個已經給出名稱的服務,然后調用一個合適的方法

當IF有一個新的SP時,服務映射器就會發送一個信號給適當的SU接口通知他們,或者如果IF沒有更多的SP,SU也會發送通知。當有事件發生時,應用程序將會通過連接到在IF中的一個信號得到通知并采取相應的動作。例如,一個圖片應用程序可能希望允許一個用戶通過EMAIL去發送一個照片,它可以監聽“沒有更多的SP給IF”這個信號,從而知道什么時候去使這個操作失效。

服務框架不應該被使用做一般的IPC通訊或者例如介于兩個小程序之間的通訊,這些應該使用其他方法來完成,例如,使用像DuiValueSpace一樣可以提供數值改變通知的數據后端的方法。

用法

作為一個服務提供者(SP)

◆SP的開發者需要準備2樣東西:

二進制文件

當一個服務端用戶應用程序試圖連接到這個服務時,這個二進制文件將被加載(如果它沒有正在運行)。

接口

服務端用戶應用程序的開發者需要的文件包括如下內容:

◆duiservicefwbaseif.h/cpp文件,這些文件對于所有的接口層都是通用的duiservicefwbaseif.h文件是libdui-dev包的一部分,duiservicefwbaseif.cpp會被編譯到libdui,所以他們都是libdui0包的一部分

◆需要給接口提供XML文件,頭文件,庫和一個.serveice文件

接口特定的頭文件和接口的XML文件將共同成為maemo-interfaces-dev包的一部分,然后相應的cpp文件需要編譯到接口特定的庫文件里面,這些庫又是maemo-interfaces包的一部分。.service文件也將會成為maemo-interfaces包的一部分。

二進制文件

◆創建一個用于定義接口的XML文件.

如果你希望一個方法連接到當前的應用,你可以添加一個chainTask="true"屬性到這個方法標簽。如果你希望一個方法是異步的,你可以添加一個asyncTask="true"屬性到這個方法的標簽里。注意這些方法必須不含有任何的'out'參數。

例如:

  1. <!DOCTYPE node PUBLIC"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN""http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> 
  2. <node> 
  3.       <interfacenameinterfacename="com.nokia.TextProcessorInterface"> 
  4.             <methodnamemethodname="reverse" chainTask="true"> 
  5.                  <arg name="message"type="s" direction="in"/> 
  6.                   <arg name=""type="s" direction="out"/> 
  7.             </method> 
  8.             <method name="blinkScreen"asyncTask="true"> 
  9.                  <arg name="message"type="s" direction="in"/> 
  10.             </method> 
  11.       </interface> 
  12. </node> 
  13.  

◆運行dui-servicefwgen工具,產生相關.h和.cpp文件,命令如下:

  1.  
  2. dui-servicefwgen -acom.nokia.TextProcessorInterfac[font=宋體, SimSun]e[/font] 

修改代碼

◆修改主要分為三個步驟,如下面的代碼段所示:

  1. //1.創建一個已經實現接口功能函數的類實例  
  2. MyService myService;  
  3.  
  4. //2.創建一個適配器去連接dbus和myService中的方法  
  5. //按照QDBusAbstractAdaptor(),它必須是創建在堆上的,  
  6. //并且內存是由QDBusAbstractAdaptor管理的,因此不需要保存指針  
  7. new MyServiceIfAdaptor( &myService );  
  8.  
  9. //3.連接到會話并注冊這個服務  
  10. QDBusConnection connection =QDBusConnection::sessionBus();  
  11. boolret=connection.registerService("com.nokia.TextProcessor");
  12. //繼續程序剩余的部分編寫 
  13. return app.exec();  

接口

定義一個接口有三個步驟:

◆創建一個定義接口的XML文件–與上面描述的是同一個XML文件.               

◆運行dui-servicefwgen這個工具,產生.h和.cpp文件,命令如下:

  1.  
  2. dui-servicefwgen -pcom.nokia.TextProcessorInterface  
  3.  
  4.  
  5.  

◆需要產生服務相關的庫.               

以上的文件需要被放進maemo-interfaces包,庫需要包含在maemo-interfaces里面,頭文件和XML文件也需要包含在maemo-interfaces-dev中。

接口和方法的文檔說明可以加在'<doc>''</doc>'之間,例如:

  1.  
  2. <interfacenameinterfacename="com.nokia.someserviceinterface"> 
  3. <doc> 
  4. <argtagargtag="brief">brief documentation for the interface</arg> 
  5. <argtagargtag="details">detailed documentation for theinterface</arg> 
  6. </doc> 
  7. <method name="showPage"> 
  8. <doc> 
  9. <argtagargtag="brief">brief documentation for showPage()method</arg> 
  10. <argtagargtag="details">detailed documentation for showPage()method</arg> 
  11. </doc> 
  12. <arg name="targetPage"type="s" direction="in" /> 
  13. <arg name="previousPage"type="s" direction="in" /> 
  14. <arg name="" type="b"direction="out"/>      
  15. </method> 
  16. ....etc 

作為一個服務使用者

◆安裝libdui-dev debian包,它會提供給你服務映射dbus守護進程,頭文件和庫文件。

◆安裝maemo-interfaces-dev包(包含代理頭、庫和封裝包的頭文件)

◆添加-ldui和-l<接口名字>到你工程文件的LIBS中。

◆在你的源文件中,包含這個接口頭文件,接著創建一個接口實例,然后調用serviceName()方法去得到這個接口的提供者

◆通過'isValid()'方法確認這個服務是否可用。

◆調用想要用的接口方法。

實現并連接slots以處理有服務映射器發送出來'serviceAvailable()','serviceUnavailable()' 和'serviceChanged()'這些signals

演示和代碼例子

在libdui/demos/servicefw/中,有個例子示范了3個服務提供者和一個服務使用者。com.nokia.textprocessor和org.maemo.textprocessor服務都實現了相同的接口-com.nokia.TextProcessorInterface.因為有2個服務,所以我們可以嘗試去移除服務,然后觀察服務用戶從一個服務轉換到另一個。有一個腳本工具/dui-servicefwgen,這個腳本工具被用來產生源文件,這些源文件是被用來給服務用戶定義接口的。下面開始運行這個演示:

◆cd libdui        

◆qmake && make && make instal(或者在duiservicemapper目錄中至少執行一個make iinstall的操作)               

◆cd demos/servicefw        

◆pushd misc; sudo ./INSTALL; popd(這個操作將把dbus服務的相關文件安裝到/usr/share/dbus-1/services目錄中)               

◆LD_LIBRARY_PATH=lib bin/user        

◆這一步將打開一個小窗口允許你輸入字符,這些字符將通過接口發送到一個服務中,而服務將返回被反轉后的字符。

在這個演示中,你可以從/usr/share/dbus-1/services中移除若干個服務去模擬服務被移除的情況(然后再添加),以此來驗證服務使用者程序是否能執行正確的操作。

英文原文:http://apidocs.meego.com/mtf/servicefw.html

原文地址 http://www.meegoq.com/thread-250-1-1.html

【編輯推薦】

  1. Meego開發中安裝Dropbox等應用詳解
  2. 從Moblin和Maemo看MeeGo開發
  3. 移動開發Linux正統之爭:MeeGo Or Android?
  4. 諾基亞:MeeGo比Android更具開放性
責任編輯:佚名 來源: 米趣網
相關推薦

2011-04-28 11:33:33

MeeGo平板電腦

2010-09-15 09:00:21

MeeGo TouchQT SDKMeeGo

2011-07-25 15:55:21

Sencha ToucHtml 5

2011-07-08 18:03:30

Cocoa Touch 網絡

2011-09-05 13:58:29

Sencha Touc控件

2010-07-22 12:25:58

Meego開發

2011-06-15 16:11:51

UIKitCocoa TouchiOS

2010-12-27 14:53:02

MeeGo

2018-02-07 09:25:50

Linux命令touch

2009-08-16 19:43:07

linux中touchtouch命令linux命令行參數

2012-07-31 17:31:41

WebLogic

2011-09-05 11:23:26

EclipseSencha Touc框架

2011-06-16 16:41:20

Qt MeeGo SDK

2011-05-20 15:00:15

MeeGo 1.2MeeGo英特爾

2011-09-05 13:45:25

jQuery MobiSencha Touc移動Web UI框架

2011-09-05 11:27:17

Sencha Touc框架HTML5

2011-05-31 15:41:00

Cocoa TouchCocoaiOS

2011-09-05 10:27:02

Sencha Touc手機應用Android

2011-08-10 16:27:07

Cocoa TouchPlist

2010-07-02 12:58:39

Meego開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 断背山在线观看 | 欧美成人精品激情在线观看 | 国产成人精品一区二区三区四区 | 在线中文一区 | 欧美精品一区二区在线观看 | 欧美综合久久 | 亚洲成人一区二区 | 岛国av在线免费观看 | 亚洲一一在线 | 久久国产日韩欧美 | 综合精品在线 | 国产成人影院 | 久久在线| 爱爱爱av | 免费看黄色视屏 | 国产精品国色综合久久 | 爱爱免费视频 | 韩国成人在线视频 | 国产精品视频不卡 | 欧美最猛黑人xxxx黑人 | 国产a级黄色录像 | 欧美日韩国产中文 | 亚洲国产一区二区三区 | 日韩视频在线观看一区二区 | 综合国产 | 欧美视频精品 | 国产精品18久久久久久久 | 欧美综合视频 | 在线日韩欧美 | 国产欧美精品 | 在线日韩欧美 | 久久精品国产一区 | 天堂网avav | 综合久久一区 | 日韩伦理一区二区三区 | 久久精品亚洲国产 | 亚洲视频在线看 | 欧美在线a | 久久机热 | 成人三级在线播放 | 日韩av电影在线观看 |