国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

雙屏異顯在Android系統(tǒng)上的實(shí)現(xiàn)

2017-01-21 15:53:45康金榮彭宏利
軟件導(dǎo)刊 2016年12期

康金榮+彭宏利

摘 要:提出了一種在ARM/Android平臺上實(shí)現(xiàn)雙屏異顯功能的方法。所謂雙屏異顯,即在同一軟硬件平臺上,實(shí)現(xiàn)同時驅(qū)動兩塊LCD屏幕,并且這兩塊屏幕所顯示的內(nèi)容可以不同。這種功能的實(shí)現(xiàn)一方面降低了硬件設(shè)備成本,另一方面對于提高消費(fèi)場景的交互性具有重要意義。

關(guān)鍵詞:Android;POS;雙屏異顯;LCD;消費(fèi)場景

DOIDOI:10.11907/rjdk.162114

中圖分類號:TP319

文獻(xiàn)標(biāo)識碼:A文章編號:1672-7800(2016)012-0118-03

0 引言

近年來,隨著ARM SOC與Android 生態(tài)組合的快速發(fā)展,其應(yīng)用已經(jīng)從智能移動終端(如智能手機(jī)、平板電腦等消費(fèi)電子領(lǐng)域)滲透到各行各業(yè)。但受制于芯片體系結(jié)構(gòu)和操作系統(tǒng)架構(gòu)設(shè)計(jì),在Android 平臺上,通常只能實(shí)現(xiàn)同步雙屏的一些應(yīng)用,如基于智能手機(jī)的顯示器應(yīng)用或者基于平板電腦的投影儀應(yīng)用。在這樣的應(yīng)用中,大屏只能作為小屏的延伸,兩塊不同的屏上只能顯示相同的內(nèi)容,專業(yè)上可稱為同步雙顯或稱雙屏同顯技術(shù)。但在現(xiàn)實(shí)應(yīng)用場景中,雙屏異顯功能更能滿足人們的需要。

本文提出了一種在Android平臺上實(shí)現(xiàn)雙屏異顯的方案。該方案以瑞芯微公司推出的RK3288芯片為硬件平臺,以Android為移動操作系統(tǒng),通過開發(fā)的APP實(shí)現(xiàn)雙屏異顯功能。

1 實(shí)現(xiàn)原理

Android框架中與顯示相關(guān)的組件主要有Activity、Windows、WindowState、Windows Manager Service、Display Manager Service、Surface Manager/Surface Flinger、Display HAL(Hardware Abstraction Layer)以及Linux Kernel中顯示方面的驅(qū)動等。Android平臺的顯示框架如圖1所示。

各層模塊功能說明如下[1-2]:①Activity:應(yīng)用程序的主要生命周期載體,顯示過程中的內(nèi)容提供者;②Windows:窗體組件為應(yīng)用顯示的載體組件,應(yīng)用的界面交互將全部通過窗體組件呈現(xiàn);③WindowState:窗體組件的實(shí)例,用于窗體狀態(tài)運(yùn)營和各屬性的組成傳遞;④Windows Manager Service:窗口管理服務(wù)是Android系統(tǒng)整個運(yùn)行狀態(tài)中所有應(yīng)用窗體的各管理服務(wù),主要負(fù)責(zé)窗體狀態(tài)的轉(zhuǎn)換和上下層之間的信息傳遞;⑤Display Manager Service:顯示設(shè)備管理服務(wù)是管理Android系統(tǒng)中邏輯顯示設(shè)備的服務(wù),主要響應(yīng)顯示參數(shù)獲取和相關(guān)狀態(tài);⑥Surface Manager/Surface Finger:系統(tǒng)級顯示管理服務(wù),處理圖形合成,顯示狀態(tài)切換及硬件設(shè)備參數(shù)調(diào)整等;⑦Display HAL(Hardware Abstraction Layer):對于硬件操作的抽象層,通過封裝部分JNI的接口與Framework以及APP層進(jìn)行互動;⑧Kernel Driver:內(nèi)核驅(qū)動處理顯示硬件設(shè)備細(xì)節(jié)參數(shù)運(yùn)行。

2 詳細(xì)設(shè)計(jì)

2.1 Android平臺下雙屏異顯設(shè)計(jì)

Android 平臺在4.2版本之后新增了對于多屏的支持,主要有3種屏幕類型:主屏幕(Primary Display)、外屏幕(External Display)和虛擬屏幕(Virtual Display)。其中自帶屏幕一般識別為主屏幕,而HDMI將會被設(shè)為外屏幕。為了方便APP訪問上述3種屏幕,Android還提供了一個統(tǒng)一的屏幕管理服務(wù)DisplayManagerService。雖然屏幕被劃分為3種類型,但是建立于它們之上的窗口合成以及渲染依然統(tǒng)一由SurfaceFlinger管理。這些新特性的引入確保了雙屏異顯的框架基礎(chǔ)。

2.1.1 Application到Framework

Android的應(yīng)用以Activity為基礎(chǔ)。應(yīng)用在啟動時會向系統(tǒng)申請建立新的Activity,系統(tǒng)通過Activity Manager Service創(chuàng)建Activity并賦予相應(yīng)的運(yùn)行環(huán)境,系統(tǒng)通過調(diào)用返回給Activity一個可操作WindowState的對象用于顯示。應(yīng)用顯示的過程將會通過系統(tǒng)和自己擁有的WindowState與底層進(jìn)行交換,而內(nèi)容最終生成于WindowState指向的Surface之中。

2.1.2 Framework到本地庫

應(yīng)用的Activity所需顯示部分將由ActivityManagerService通過View -> ViewRoot -> Window 的關(guān)系最終向WindowsManagerService申請一個新Window。WindowsManagerService通過系統(tǒng)本地運(yùn)行調(diào)用,最終生成一個新的Surface封裝在WindowState中提供給Activity。DisplayManagerService是用于管理顯示的邏輯設(shè)備的一個中間層服務(wù),主要用于維護(hù)已注冊的顯示設(shè)備對象列表并向系統(tǒng)提供各顯示設(shè)備的參數(shù)和運(yùn)行情況。WindowsManagerService在運(yùn)行過程中將會評估當(dāng)前設(shè)備的顯示設(shè)備對象,通過DisplayManagerService獲取當(dāng)前已經(jīng)在線的顯示設(shè)備對象進(jìn)行操作。其主要操作是將WindowState、Surface等軟件中抽象的對象與實(shí)際的邏輯顯示設(shè)備對象進(jìn)行綁定,此外,將對比當(dāng)前顯示參數(shù)和邏輯顯示設(shè)備的實(shí)際參數(shù),最終將對比結(jié)果提供給下層用于圖像的適配和變形。

2.1.3 本地庫與Kernel

本地庫中顯示子系統(tǒng)中的最重要部分——Surface Manager/Surface Flinger。Surface Manager將負(fù)責(zé)管理顯示與存取操作間的互動,Surface Flinger將已傳送的各Surface內(nèi)容以及應(yīng)用所申請2D、3D的繪圖進(jìn)行系統(tǒng)級合成,并且管理雙FB刷新機(jī)制。合成結(jié)果將直接送入Framebuffer進(jìn)行顯示。其中如果硬件有相應(yīng)的加速設(shè)備可通過OpenGL/ES進(jìn)行圖像硬件加速,Display Manager Service則可通過Surface 和Display HAL獲取較多的硬件設(shè)備參數(shù)。

2.2 Android平臺下雙屏異顯實(shí)現(xiàn)

2.2.1 概述

Android支持多屏幕框架為雙屏異顯工作提供了諸多便利,如Surface Manger在識別到當(dāng)前設(shè)備擁有多個邏輯顯示設(shè)備時,可根據(jù)需要創(chuàng)立對應(yīng)的Surface; 通過Display Manager Service 也可方便地獲取到顯示設(shè)備列表并進(jìn)行操作。下文將對雙屏異顯中的技術(shù)核心點(diǎn)進(jìn)行闡述。

2.2.2 Window Manager Service的改造

Window Manager Service是一個顯示控制方面的核心服務(wù),選擇通過Window Manager Service進(jìn)行改造會較為方便地獲取到各個運(yùn)行的顯示相關(guān)服務(wù)的通訊通路,以及所有窗體的狀態(tài)控制,從而可以減少對于原生系統(tǒng)框架的修改,減少引入Bug和統(tǒng)一性降低的風(fēng)險(xiǎn)[3]。

Android系統(tǒng)通過一個WindowState的列表維護(hù)當(dāng)前窗體棧,列表從開始直至結(jié)束代表當(dāng)前窗體顯示的窗體景深(前后)布局順序。該列表與當(dāng)前顯示默認(rèn)設(shè)備綁定,而WindowState 本身包含著當(dāng)前窗體的Surface信息。以上實(shí)現(xiàn)了默認(rèn)顯示設(shè)備、WindowState列表以及各Window 的Surface的連接關(guān)系。

修改雙屏異顯功能如圖2所示。

根據(jù)當(dāng)前顯示情況進(jìn)行判斷,若當(dāng)前是雙屏同顯狀態(tài),有應(yīng)用請求顯示至第二塊屏幕上。首先按照默認(rèn)窗體棧,也即默認(rèn)WindowState列表創(chuàng)立一個新的窗體棧——第二窗體棧,通過Display Manager Service獲取第二塊屏幕操作上下文對象DisplayContent并將新創(chuàng)建的第二窗體棧與獲取的上下文對象綁定。這時從第一窗體棧中查找當(dāng)前應(yīng)用的窗體狀態(tài)對象WindowState,獲取后將其添加到第二窗體棧中,并從默認(rèn)窗體棧中將這個窗體對象移除。

若當(dāng)前顯示狀態(tài)已經(jīng)為雙屏異顯狀態(tài),則查找默認(rèn)窗體棧獲取當(dāng)前應(yīng)用的窗體對象WindowState,將第二窗體棧中的應(yīng)用窗體移動到默認(rèn)窗體棧棧頂,然后將當(dāng)前應(yīng)用的窗體對象移動給第二窗體棧[4]。

偽代碼表示:

moveAppToSecondDisplay(CurrnetID)

{

//查找第二塊屏幕

displayCount=mDisplayContents.size();

defaultContent=getDefaultDisplayContent();

secondDisplayContent = null;

for(int i = 0; i < displayCount;i++)

{

tempContent=mDisplayContents.valueAt(i);

if(tempContent != defaultContent){

secondDisplayContent = tempContent;

break;

}

}

//查找當(dāng)前應(yīng)用窗體并綁定顯示屏幕

currentWindowState = null;

defaultWindowList=defaultContent.getWindowList();

secondWindowList=secondDisplayContent.getWindowList();

for(int i=defaultWindowList.size()-1;i>=0;i--)

{

currentWindowState=defaultWindowList.get(i);

if(currentWindowState.groupId; == CurrnetID) break;

defaultWindowList.remove(win);

currentWindowState.DisplayContent = secondDisplayContent;

//移動窗體

SecondDisplayAppMoveBack();

secondWindowList.add(currentWindowState);

}

撤銷雙屏異顯時,將第二窗體棧中的應(yīng)用窗體移動至默認(rèn)窗體棧棧頂,銷毀創(chuàng)建的第二窗體棧,有Display狀態(tài)配置成雙屏同顯。

3 結(jié)語

本文從硬件到軟件,自上而下分層分模塊地描述了在ARM/Android的軟硬件平臺上雙屏異顯應(yīng)用于智能POS的實(shí)現(xiàn)方法,該方法相對而言具有低成本、低功耗以及高開放度的硬軟件組合等特點(diǎn),所實(shí)現(xiàn)的雙屏異顯不僅能應(yīng)用在智能POS上,而且針對各行各業(yè)需要交互的場景都具有很好的參考價值。

參考文獻(xiàn):

[1] 文泉.無線POS機(jī)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2013.

[2] CHANDRIAN P.Efficient Java native interface for Android based mobile devices[D].Arizona:Arizona State University,2011.

[3] 曹凱.基于Android的POS機(jī)刷卡器驅(qū)動設(shè)計(jì)[D].青島:中國海洋大學(xué),2013.

[4] 范鋒.Android的架構(gòu)與應(yīng)用開發(fā)研究[J].信息與電腦:理論版,2012(5):34.

(責(zé)任編輯:孫 娟)

县级市| 都匀市| 名山县| 富顺县| 依安县| 尚志市| 游戏| 甘孜| 浏阳市| 安平县| 阳新县| 浪卡子县| 区。| 娱乐| 马边| 双牌县| 南城县| 天门市| 隆安县| 新邵县| 辽阳市| 永清县| 巴楚县| 建阳市| 建瓯市| 迁安市| 滨州市| 叶城县| 乾安县| 佛冈县| 漾濞| 肇州县| 汕尾市| 康乐县| 克山县| 樟树市| 蒲城县| 定日县| 惠东县| 淳安县| 二连浩特市|