本發(fā)明涉及計(jì)算機(jī)軟件技術(shù)領(lǐng)域,具體涉及一種應(yīng)用頁面初始化的編譯控制裝置及方法。
背景技術(shù):
一款應(yīng)用程序(以下簡稱“應(yīng)用”)通常會(huì)有大量頁面和子頁面,每個(gè)頁面和子頁面在編程上都要編寫“初始化-運(yùn)行-銷毀”的相關(guān)代碼。
在應(yīng)用頁面初始化的過程中,涉及大量的對源代碼進(jìn)行編譯的工作,如何精簡、優(yōu)化編寫應(yīng)用程序的代碼量是本領(lǐng)域技術(shù)人員亟待解決的一個(gè)技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的應(yīng)用頁面初始化的編譯控制裝置及方法。
依據(jù)本發(fā)明的一個(gè)方面,提供一種應(yīng)用頁面初始化的編譯控制裝置,包括編譯器、生成器和注入器,其中,所述編譯器,用于在應(yīng)用頁面初始化的編譯過程中,查找出預(yù)先標(biāo)注了視圖注解的變量;所述生成器,用于導(dǎo)入所述頁面的所有標(biāo)注了視圖注解的變量,并調(diào)用生成函數(shù)生成所述頁面的初始化代碼;所述注入器,用于將所述初始化代碼注入到所述頁面。
優(yōu)選的,所述視圖注解包括單個(gè)注解類型和批量注解類型,所述生成器包括單個(gè)注解生成器和批量注解生成器。
優(yōu)選的,所述編譯器還用于:分析出所述變量的視圖注解是單個(gè)注解類型還是批量注解類型。
優(yōu)選的,所述編譯器還用于:對于單個(gè)注解類型,調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量傳入所述生成器;對于批量注解類型,調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量以及所述批量注解中存儲(chǔ)的數(shù)個(gè)視圖標(biāo)識傳入所述生成器。
優(yōu)選的,所述編譯器還用于將所述初始化代碼連同所述應(yīng)用程序的源代碼提供給應(yīng)用程序開發(fā)工具,生成預(yù)編譯文件;所述注入器針對所述頁面調(diào)用所述預(yù)編譯文件,完成所述頁面的初始化。
依據(jù)本發(fā)明的另一個(gè)方面,提供一種應(yīng)用頁面初始化的編譯控制方法,包括:編譯器在應(yīng)用頁面初始化的編譯過程中,查找出預(yù)先標(biāo)注了視圖注解的變量;所述編譯器將所述頁面的所有標(biāo)注了視圖注解的變量導(dǎo)入到生成器,所述生成器調(diào)用生成函數(shù)生成所述頁面的初始化代碼;注入器將所述生成器生成的初始化代碼注入到所述頁面。
優(yōu)選的,所述視圖注解包括單個(gè)注解類型和批量注解類型;所述生成器包括單個(gè)注解生成器和批量注解生成器;所述生成器調(diào)用生成函數(shù)生成所述頁面的初始化代碼包括:所述單個(gè)注解生成器調(diào)用生成函數(shù),針對單個(gè)注解類型的變量生成所述頁面的初始化代碼,和/或,所述批量注解生成器調(diào)用生成函數(shù),針對批量注解類型的變量生成所述頁面的初始化代碼。
優(yōu)選的,所述方法還包括:所述編譯器分析出所述變量的視圖注解是單個(gè)注解類型還是批量注解類型。
優(yōu)選的,所述方法還包括:對于單個(gè)注解類型,所述編譯器調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量傳入所述生成器;對于批量注解類型,所述編譯器調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量以及所述批量注解中存儲(chǔ)的數(shù)個(gè)視圖標(biāo)識傳入所述生成器。
優(yōu)選的,所述方法還包括:所述編譯器將所述初始化代碼連同所述應(yīng)用程序的源代碼提供給應(yīng)用程序開發(fā)工具,生成預(yù)編譯文件;所述注入器將所述生成器生成的初始化代碼注入到所述頁面包括:所述注入器針對所述頁面調(diào)用所述預(yù)編譯文件,完成所述頁面的初始化。
可見,本發(fā)明基于預(yù)編譯技術(shù),攔截并預(yù)處理應(yīng)用程序源代碼的編譯過程,通過預(yù)先為視圖注解的頁面生成初始化代碼,可精簡代碼編寫量,提高代碼運(yùn)行速度,并且,將注解分為單個(gè)注解和批量注解類型,方便靈活??傊?,本發(fā)明可保證應(yīng)用程序?qū)崿F(xiàn)同樣的功能,但代碼編寫量和時(shí)間將大大減少,頁面中視圖越多,開發(fā)效率能夠提高得越多。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說明
通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明實(shí)施例的應(yīng)用頁面初始化的編譯控制裝置結(jié)構(gòu)示意圖;
圖2示出了根據(jù)本發(fā)明實(shí)施例的應(yīng)用頁面初始化的編譯控制方法流程圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
在對本發(fā)明實(shí)施例進(jìn)行詳細(xì)介紹之前,首先對涉及的一些術(shù)語作如下說明。
開發(fā)者:開發(fā)安卓應(yīng)用程序的人員。
IDE(Integrated Development Environment,集成開發(fā)環(huán)境)是用于提供程序開發(fā)環(huán)境的工具,可以用來編寫、調(diào)試和執(zhí)行代碼。
編譯:一種使安卓源代碼(Java)轉(zhuǎn)變?yōu)闄C(jī)器碼(dex)的過程。一個(gè)安卓應(yīng)用程序從源代碼經(jīng)過安卓IDE編譯后,會(huì)成為一個(gè)獨(dú)立的安裝包,可以安裝在手機(jī)、平板等設(shè)備上使用。
預(yù)編譯:在進(jìn)行編譯的過程中,開發(fā)者可以在應(yīng)用源代碼中引用一個(gè)(或多個(gè))自己(或他人)開發(fā)的編譯器(Processor),來攔截這一過程,預(yù)先對源代碼做一些處理,然后再把做過處理的源代碼繼續(xù)交付安卓IDE進(jìn)行后續(xù)編譯。
編譯器:一種安卓新版本IDE引入的工具,能夠攔截IDE的編譯,對應(yīng)用源代碼中使用注解(Annotation)的地方做一些增刪改查的處理,然后把處理過的源代碼交由IDE進(jìn)行后續(xù)編譯。
注解(Annotation):一種安卓新版本IDE引入的工具,可以由開發(fā)者標(biāo)記某些特定代碼,使得在預(yù)編譯過程中,編譯器可以識別出這些被標(biāo)記的代碼,根據(jù)不同的注解標(biāo)記做不同的處理。
本發(fā)明實(shí)施例基于安卓IDE構(gòu)造了一個(gè)的視圖注解工具,能夠攔截安卓IDE的編譯過程,分析頁面源代碼中的視圖注解,并根據(jù)被標(biāo)注的視圖類型,自動(dòng)生成對應(yīng)的視圖代碼,完成頁面的初始化。
參見圖1,為本發(fā)明實(shí)施例提供的應(yīng)用頁面初始化的編譯控制裝置結(jié)構(gòu)示意圖。該裝置包括編譯器101、生成器102和注入器。其中:
編譯器101,用于在應(yīng)用頁面初始化的編譯過程中,查找出預(yù)先標(biāo)注了視圖注解的變量;
生成器102,用于導(dǎo)入頁面的所有標(biāo)注了視圖注解的變量,并調(diào)用生成函數(shù)生成頁面的初始化代碼;
注入器103,用于將初始化代碼注入到頁面。
其中,視圖注解包括單個(gè)注解類型和批量注解類型,這可由編譯器101進(jìn)行分析獲知,因此,編譯器101還用于分析出變量的視圖注解是單個(gè)注解類型還是批量注解類型。
進(jìn)一步,編譯器101還用于:對于單個(gè)注解類型,調(diào)用查詢?nèi)萜骱瘮?shù)獲得變量的頁面名稱,創(chuàng)建頁面名稱對應(yīng)的生成器102,并將變量傳入該生成器102;對于批量注解類型,調(diào)用查詢?nèi)萜骱瘮?shù)獲得變量的頁面名稱,創(chuàng)建頁面名稱對應(yīng)的生成器102,并將變量以及批量注解中存儲(chǔ)的數(shù)個(gè)視圖標(biāo)識(id)傳入生成器102。
相應(yīng)的,生成器103包括單個(gè)注解生成器和批量注解生成器,即,對于包含單個(gè)注解變量的頁面,創(chuàng)建單個(gè)注解生成器,由該單個(gè)注解生成器生成相應(yīng)的頁面初始化代碼;對于包含批量注解變量的頁面,創(chuàng)建批量注解生成器,由該批量注解生成器生成相應(yīng)的頁面初始化代碼。
在生成器102生成初始化代碼之后,編譯器101還用于將初始化代碼連同應(yīng)用程序的源代碼提供給IDE,生成預(yù)編譯文件;此后,注入器103針對頁面調(diào)用預(yù)編譯文件,完成該頁面的初始化過程。
在應(yīng)用開發(fā)過程中引入本發(fā)明實(shí)施例提供的裝置后,實(shí)施過程如下:
1、安卓IDE在編譯時(shí)會(huì)自動(dòng)觸發(fā)本裝置,將源代碼中所有被視圖注解標(biāo)注的變量傳入編譯器。
2、可創(chuàng)建一個(gè)全局生成器緩存。
3、編譯器逐一分析每一個(gè)變量的視圖注解類型。
具體的,視圖注解類型分為單個(gè)注解類型和批量注解類型,編譯器會(huì)把每一個(gè)變量分類歸檔,如,按鈕button1和button2都屬于頁面activity1,那么會(huì)創(chuàng)建一個(gè)與activity1對應(yīng)的生成器,將button1和button2都存入該生成器中。
單個(gè)注解類型:
(1)調(diào)用編譯器自身的查詢?nèi)萜骱瘮?shù)(例如,getEnclosingElement()),獲得該變量所處的頁面的名稱;
(2)在全局生成器緩存中查找該頁面名稱,取出該頁面名稱對應(yīng)的單個(gè)注解生成器,如果沒有就創(chuàng)建一個(gè)單個(gè)注解生成器,放入全局生成器緩存中;
(3)將該變量傳入該生成器。
批量標(biāo)注類型:
(1)調(diào)用編譯器自身的查詢?nèi)萜骱瘮?shù),獲得該變量所處的頁面的名稱;
(2)在全局生成器緩存中查找該頁面名稱,取出該頁面名稱對應(yīng)的批量注解生成器,如果沒有就創(chuàng)建一個(gè)批量注解生成器,存入全局生成器緩存中;
(3)將該變量和注解中儲(chǔ)存的數(shù)個(gè)視圖id傳入該生成器。
4、生成器調(diào)用生成函數(shù),生成各個(gè)頁面的初始化代碼。
一個(gè)頁面對應(yīng)一個(gè)生成器,一個(gè)生成器內(nèi)部存有該頁面中需要初始化的所有變量。生成器生成一個(gè)與頁面關(guān)聯(lián)的java文件,如頁面activity1關(guān)聯(lián)的自動(dòng)初始化java文件為activity1$$Injector.java。
單個(gè)注解生成器:
生成器逐一處理頁面中每一個(gè)需要初始化的變量,模仿開發(fā)者在文件中寫入,正常流程下開發(fā)者需要編寫的代碼,如頁面activity1中有兩個(gè)按鈕Button1和button2,那么生成器會(huì)在activity1$$Injector.java中自動(dòng)生成類似代碼,例如:
批量標(biāo)注生成器:
生成器逐一處理頁面中每一個(gè)需要初始化的變量,模仿開發(fā)者在文件中寫入,正常流程下開發(fā)者需要編寫的代碼。
5、編譯器將所有生成器自動(dòng)生成的代碼,連同應(yīng)用本身的源代碼交由安卓IDE進(jìn)行后續(xù)編譯,并由安卓IDE自動(dòng)打包進(jìn)一個(gè)安裝包。
6、應(yīng)用程序?qū)嶋H運(yùn)行時(shí),在安卓系統(tǒng)將要初始化某一頁面時(shí),開發(fā)者調(diào)用注入器,將頁面名稱傳入注入器,例如注入器會(huì)調(diào)用安卓系統(tǒng)自身的Class.forName()函數(shù),根據(jù)頁面名稱自動(dòng)找到對應(yīng)的,在第4、5步驟中自動(dòng)生并編譯好的代碼。
例如,開發(fā)者將頁面activity1傳入注入器,注入器會(huì)自動(dòng)找到預(yù)編譯好的文件activity1$$Injector。
7、注入器自動(dòng)將頁面?zhèn)魅雽?yīng)的預(yù)編譯文件,安卓系統(tǒng)將調(diào)用預(yù)編譯文件中的代碼,完成該頁面的初始化。
下面以兩個(gè)具體的例子,說明采用本發(fā)明裝置的效果。
例1、單個(gè)注解
如果未采取本裝置,假設(shè)開發(fā)者需要在應(yīng)用程序頁面(Activity)上查找一個(gè)按鈕(Button),并保存至一個(gè)按鈕變量(Button button1),必須編寫如下步驟代碼:
步驟1、在應(yīng)用程序頁面對應(yīng)的布局文件中確定目標(biāo)按鈕的id,如“button1”;
步驟2、根據(jù)目標(biāo)按鈕的id,聲明一個(gè)對應(yīng)按鈕變量Button button1;
步驟3、調(diào)用Activity自身的函數(shù)findViewById(),通過這個(gè)按鈕的id獲得一個(gè)視圖(View);
步驟4、使用Java類型強(qiáng)制轉(zhuǎn)換功能,將第一步獲得的視圖強(qiáng)制轉(zhuǎn)換為按鈕;
步驟5、將強(qiáng)制轉(zhuǎn)換得到的按鈕賦予這個(gè)按鈕變量。
對于每一個(gè)需要查找的按鈕,都需要編寫步驟3-5這三個(gè)步驟的代碼,缺一不可。如果按鈕數(shù)量較少尚可,但數(shù)量較多時(shí),為每一個(gè)按鈕編寫這些代碼將會(huì)花費(fèi)巨量時(shí)間和精力。
使用本裝置后,將極大節(jié)省編寫代碼的數(shù)量和時(shí)間,只需執(zhí)行如下步驟:
步驟1、在應(yīng)用程序頁面對應(yīng)的布局文件中確定目標(biāo)按鈕的id,如“button1”;
步驟2、聲明一個(gè)按鈕變量Button button1;
步驟3、使用視圖注解(@InjectView)標(biāo)記該變量。
在該源代碼進(jìn)行編譯的時(shí)候,本裝置能夠自動(dòng)攔截安卓IDE的編譯過程,為包含這個(gè)按鈕變量的頁面自動(dòng)添加入上述傳統(tǒng)流程的步驟3-5的代碼,然后再將修改過的頁面代碼交由IDE進(jìn)行后續(xù)編譯。
例2、批量注解
開發(fā)者需要在頁面上查找數(shù)個(gè)按鈕,然后將其保存在一個(gè)按鈕數(shù)組中,必須編寫如下步驟代碼:
步驟1、創(chuàng)建一個(gè)按鈕數(shù)組Button[]buttons=new Button[];
步驟2、對每一個(gè)需要查找的按鈕,執(zhí)行如下步驟:
(1)在應(yīng)用程序頁面對應(yīng)的布局文件中確定目標(biāo)按鈕的id,如“button1”;
(2)根據(jù)目標(biāo)按鈕的id,聲明一個(gè)對應(yīng)按鈕變量Button button1;
(3)調(diào)用Activity自身的函數(shù)findViewById(),通過這個(gè)按鈕的id獲得一個(gè)視圖(View);
(4)使用Java類型強(qiáng)制轉(zhuǎn)換功能,將第一步獲得的視圖強(qiáng)制轉(zhuǎn)換為按鈕;
(5)將強(qiáng)制轉(zhuǎn)換得到的按鈕賦予這個(gè)按鈕變量;
(6)將這個(gè)按鈕變量添加入按鈕數(shù)組。
使用本裝置后,只需執(zhí)行如下步驟:
步驟1、在應(yīng)用程序頁面對應(yīng)的布局文件中確定所有目標(biāo)按鈕的id,如“button1”、“button2”、“button3”;
步驟2、聲明一個(gè)按鈕數(shù)組Button[]buttons;
步驟3、使用視圖注解@InjectView標(biāo)記該按鈕數(shù)組,并且將所需按鈕的id依次寫在注解傳參中@InjectView([“button1”,”button2”,”button3”])。
在該源代碼進(jìn)行編譯的時(shí)候,本裝置能夠攔截安卓IDE的編譯過程,為包含這個(gè)按鈕數(shù)組的頁面自動(dòng)加入上述傳統(tǒng)流程第2步驟的代碼,然后再將修改過的頁面代碼交由IDE進(jìn)行后續(xù)編譯。
可見,本發(fā)明基于預(yù)編譯技術(shù),攔截并預(yù)處理應(yīng)用程序源代碼的編譯過程,通過預(yù)先為視圖注解的頁面生成初始化代碼,可精簡代碼編寫量,提高代碼運(yùn)行速度,并且,將注解分為單個(gè)注解和批量注解類型,方便靈活??傊?,本發(fā)明可保證應(yīng)用程序?qū)崿F(xiàn)同樣的功能,但代碼編寫量和時(shí)間將大大減少,頁面中視圖越多,開發(fā)效率能夠提高得越多。
目前安卓系統(tǒng)還存在另一種基于反射技術(shù)的初始化頁面工具,在應(yīng)用程序運(yùn)行過程中,由安卓運(yùn)行設(shè)備掃描內(nèi)存中的應(yīng)用程序,在內(nèi)存中實(shí)時(shí)分析視圖注解標(biāo)記并查找視圖。但由于安卓系統(tǒng)的特性,反射技術(shù)十分消耗CPU資源。然而對于本裝置,由于應(yīng)用程序在編譯的時(shí)候就已經(jīng)完成了初始化,實(shí)際運(yùn)行過程中完全不需要實(shí)時(shí)掃描內(nèi)存分析視圖注解標(biāo)記,不存在任何性能損耗。
與上述裝置相對應(yīng),本發(fā)明實(shí)施例還提供一種應(yīng)用頁面初始化的編碼控制方法。參見圖2,該裝置包括如下步驟:
S101:編譯器在應(yīng)用頁面初始化的編譯過程中,查找出預(yù)先標(biāo)注了視圖注解的變量。
S102:編譯器將頁面的所有標(biāo)注了視圖注解的變量導(dǎo)入到生成器,生成器調(diào)用生成函數(shù)生成頁面的初始化代碼。
S103:注入器將生成器生成的初始化代碼注入到頁面。
優(yōu)選的,所述視圖注解包括單個(gè)注解類型和批量注解類型;所述生成器包括單個(gè)注解生成器和/或批量注解生成器,所述生成器調(diào)用生成函數(shù)生成所述頁面的初始化代碼包括:所述單個(gè)注解生成器調(diào)用生成函數(shù),針對單個(gè)注解類型的變量生成所述頁面的初始化代碼,以及/或者,所述批量注解生成器調(diào)用生成函數(shù),針對批量注解類型的變量生成所述頁面的初始化代碼。
優(yōu)選的,所述方法還包括:所述編譯器分析出所述變量的視圖注解是單個(gè)注解類型還是批量注解類型。
優(yōu)選的,所述方法還包括:對于單個(gè)注解類型,所述編譯器調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量傳入所述生成器;對于批量注解類型,所述編譯器調(diào)用查詢?nèi)萜骱瘮?shù)獲得所述變量的頁面名稱,創(chuàng)建所述頁面名稱對應(yīng)的生成器,并將所述變量以及所述批量注解中存儲(chǔ)的數(shù)個(gè)視圖標(biāo)識傳入所述生成器。
優(yōu)選的,所述方法還包括:所述編譯器將所述初始化代碼連同所述應(yīng)用程序的源代碼提供給應(yīng)用程序開發(fā)工具,生成預(yù)編譯文件;所述注入器將所述生成器生成的初始化代碼注入到所述頁面包括:所述注入器針對所述頁面調(diào)用所述預(yù)編譯文件,完成所述頁面的初始化。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的用戶變身控制的系統(tǒng)中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對本發(fā)明進(jìn)行說明而不是對本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。