整個安卓平臺的差異化越來越大。

目前創(chuàng)新互聯(lián)建站已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管維護、企業(yè)網(wǎng)站設(shè)計、柘榮網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
市場上存在的各種安卓系統(tǒng)之間的版本差異只是安卓平臺碎片化問題的一個方面。總的來說,安卓平臺碎片化問題是指隨著安卓系統(tǒng)快速演化。
不同軟硬件廠商生產(chǎn)的安卓設(shè)備以及定制的安卓系統(tǒng)層出不窮,導(dǎo)致安卓設(shè)備之間的差異越來越大,整個安卓的生態(tài)系統(tǒng)嚴重分裂而帶來的一系列問題。在這種碎片化環(huán)境中,一個安卓應(yīng)用在不同的設(shè)備上可能呈現(xiàn)出完全不同的行為。
為了保證產(chǎn)品能夠適配各式各樣的移動設(shè)備,安卓開發(fā)者們必須針對不同的設(shè)備對其開發(fā)的應(yīng)用進行特殊的處理。無疑,這給開發(fā)者帶來不少負擔,也使得安卓應(yīng)用的兼容性面臨著巨大的挑戰(zhàn)。
擴展資料
兼容性問題顧名思義能夠?qū)е聭?yīng)用在不同設(shè)備上的表現(xiàn)出不一致的行為。這種不一致具體表現(xiàn)形式為:應(yīng)用在特定的設(shè)備上可能會出現(xiàn)功能性問題,性能問題,或者無法適配而使用戶體驗下降。
以設(shè)備屏幕大小的問題為例,現(xiàn)存的安卓設(shè)備屏幕尺寸、分辨率千差萬別,屏幕長寬比例也是不盡相同。對于應(yīng)用開發(fā)者來說,如果沒有針對不同屏幕尺寸對界面進行優(yōu)化,那么他們的產(chǎn)品應(yīng)在部分設(shè)備上就可能造成布局問題,而使得用戶體驗受到嚴重的影響。
參考資料來源:百度百科-安卓碎片化
公司有一個基于Android的平板產(chǎn)品,在醫(yī)院中使用。也就是說軟件和硬件(平板)都是我們提供給醫(yī)院的,但是我們是個軟件公司,所以平板是我們從設(shè)備制造商采購來的。一開始的計劃是我們只需要采購?fù)粋€型號的設(shè)備( 設(shè)備A ),所以這個項目幾乎不用考慮屏幕適配的問題。但是最近可能公司和設(shè)備商沒有完全談攏,我們又換了一批新的設(shè)備( 設(shè)備B )。設(shè)備B從屏幕大小上來看,是和設(shè)備A是一模一樣的,但是卻出現(xiàn)了和設(shè)備A差距較大的顯示效果
先通過日志打印一下兩個設(shè)備的屏幕相關(guān)信息
設(shè)備A 輸出結(jié)果:
widthPixels: 1280
heightPixels: 737
densityDpi: 210
density: 1.3125
設(shè)備B 輸出結(jié)果:
widthPixels: 1280
heightPixels: 800
densityDpi: 160
density: 1.0
這里主要三個不同,分別是 heightPixels 、 densityDpi 、 density ,我們一個個來分析
問題一:heightPixels不同
一開始我是有點困惑的,這個737是什么鬼,兩個屏幕明明是一樣大的,為什么一個高800,一個高737?
其實, heightPixels 代表的是屏幕有效的高度,就是
所以,其實就是一個設(shè)備帶導(dǎo)航欄,而另一個不帶,雖然我在應(yīng)用中隱藏了導(dǎo)航欄,但是這個高度不管你有沒有隱藏導(dǎo)航欄,這個值都不會改變。
綜合上述,這兩臺設(shè)備的分辨率,其實都是1280像素x800像素。所以 heightPixels 不同,實際上對我們屏幕適配并沒有什么影響
問題二:densityDpi不同
densityDpi 就是我們常說的DPI,查閱了計算公式是下面這樣的
但是, densityDpi 和屏幕分辨率其實是可以通過adb命令改變的
那這個公式是不是感覺有點奇怪呢,兩個都是變量,那對角線的尺寸豈不是也變了?但是顯然一個設(shè)備生產(chǎn)出來以后,屏幕對角線尺寸肯定是固定的。
查閱了百度百科中對DPI的定義
所以,這里我是這么認為的(如果說的有問題歡迎指正)
我們一開始使用 wm size 和 wm density 查詢到的就是原始的屏幕分辨率和DPI,但是之后我們使用adb命令修改后, 實際上屏幕分辨率并沒有變化,變化的是圖像分辨率,即一個圖像像素,其實是已經(jīng)補充了很多個屏幕像素,從而表現(xiàn)出頁面上的元素大小發(fā)生了變化
問題三:density不同
density其實就是一個比例系數(shù)
所以兩個設(shè)備的 density 不同,歸根結(jié)底就是 densityDpi 不同
經(jīng)過我們上面的分析,我們可以得出這樣的結(jié)果
兩個設(shè)備屏幕寬高尺寸相同,分辨率相同,項目中使用dp作為單位,但是原始 densityDpi 不同,導(dǎo)致了兩個設(shè)備上UI元素顯示的大小(px)不同
對于同樣尺寸的設(shè)備,我們當然希望兩端在UI元素的大小上顯示效果是一致的,但是Android碎片化嚴重,即使同樣尺寸同樣分辨率的設(shè)備,也有可能出現(xiàn)DPI不同,這就是Android屏幕適配最大的問題
那我們?nèi)绾蝸斫鉀Q這個問題呢?
Google提供了資源目錄的 限定符規(guī)則
手機寬度dp值計算方法:
這里我提供了一個自動生成sw文件工具類
由于一開始的UI設(shè)計是以設(shè)備A為基準的,所以設(shè)備A(即values-sw609dp)中的dp值保持不變,設(shè)備B(即values-sw800dp)中的1dp = 1.3125dp,這樣兩個設(shè)備上的UI顯示就達到了一致的效果
經(jīng)過我們上面的分析,應(yīng)該有很多人會發(fā)現(xiàn),我們使用adb命令 wm density 210 的將設(shè)備B的 densityDpi 設(shè)置成設(shè)備A一致,也能達到一樣的效果。但是這也只能在開發(fā)調(diào)試過程中這么做,我們不可能通過這種方法去修改廠家或者所有用戶手中的設(shè)備
通過本文的分析,你是否對android屏幕的碎片化有一個新的理解呢,并不是分辨率和屏幕大小完全相同的兩個設(shè)備,它們的頁面顯示效果就一定是一致的
android碎片化指安卓系統(tǒng)被各個手機廠家改成自已的個性化版本,并沒有統(tǒng)一的版本。
名稱欄目:android碎片化,android碎片化嚴重
本文網(wǎng)址:http://chinadenli.net/article40/dsipoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、商城網(wǎng)站、Google、動態(tài)網(wǎng)站、用戶體驗、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)