1. 程式人生 > >Android介面 Html5還是Native,說說他們的各自的優缺點。

Android介面 Html5還是Native,說說他們的各自的優缺點。

曾被人問到Android介面用Html5寫有什麼優勢,當時由於沒有想過這個問題,也對html5不是很瞭解,現在在這總結一下。

android和iphone都提供了webview的控制元件,這個控制元件實質是一個webkit瀏覽器核心,用於解析html、css、js程式碼。

所以,native app可以呼叫webview空間來展示我們的web頁面。同時,由於對css3的較好支援,native那種絢麗的介面就可以用html+css較好的實現出來,達到逼真的native app的效果。

正因為Webview的控制元件的存在,我們能夠在我們的應用中加入Web網頁的元素.也就為我們的開發提供了更多的思路.

總的來說,關於Android的開發有三種解決方案:Native , Web 和 Hybrid.

Native app就是用Android SDK來實現的應用;

Web app是基於瀏覽器來實現的一種應用。

Hybrid app是一種可以下載的Native App,其使用者介面的全部或者部分元素在嵌入式瀏覽器元件(WebView之類的)裡面執行。對使用者來說,Hybrid App與Native App幾乎難以區別:它們都可以從應用程式商店或市場來下載,存放在移動裝置上,其執行方式完全如同其他任何應用程式。但是對開發者來說,這存在巨大的差異,因為他們無需為每一種移動作業系統從頭開始重新編寫應用程式,而是隻要用HTML、CSS和JavaScript編寫其中一部分應用程式程式碼,就可以在多個裝置上重複使用。

首先說一下各自主要的優缺點。

Native app

優點:

可以充分發揮系統特性(呼叫系統服務、記憶體管理等),操控裝置硬體(如相機、藍芽、振動器等);

可提供最佳的使用者體驗,最優質的使用者介面,最華麗的互動,比較適合製作遊戲等效能要求比較高的應用;

可訪問本地資源;

與web app相比,效能更好,互動流暢(尤其是複雜應用)。

缺點:

在更新的時候需要釋出新的版本,不夠方便;

各平臺開發語言、sdk和開發環境不同,學習成本高;

各平臺不相容,多平臺的開發、移植比較複雜,開發成本高,開發週期長;

針對多種裝置(不同解析度、不同硬體配置等)的除錯和適配較麻煩,開發成本高,開發週期長;

維持多個版本的成本比較高。


Web app(純web,也就是不需要下載,通過手機瀏覽器開啟的一種應用)

優點

使用web方式可以實現網頁完成之後,可以在其他裝置上使用,實現跨平臺;

使用web方式製作mobie app最大的好處是,客戶端無需更新,而且介面的更新由於是基於html5,可能只需要寫幾個外掛就完成了功能的更新新增;

並且資料顯示很多手機使用者不是經常更新他的app程式,同時相對於native app,web方式修改app的介面的成本更低一些。

所以說,對於對介面的靈活性有較高要求的app,比較傾向於用web方式實現mobie app。

缺點:

受限於手機瀏覽器的支援,

純粹的移動Web App(指在瀏覽器裡面執行的應用程式,而不是Hybrid App)目前只能訪問攝像頭、麥克風和地址簿等裝置功能。

雖然全球資訊網聯盟(W3C)方面的工作取得了進展,讓Web App可以訪問這類裝置服務,

但是移動瀏覽器目前並不提供這樣的功能——移動瀏覽器提供這樣的功能對許多創新型的移動應用程式來說是一個關鍵要求;

而且效能上無法充分發揮系統特性(呼叫系統服務、記憶體管理等),無法操控裝置硬體(如相機、藍芽、振動器等)。

Bybrid app

Hybrid App開發利用了原生功能,同時又為將來採用HTML5充當著具有戰略意義的臺階。

優點:

混合方式開發的app擁有上述兩者的一些優點,比如Web app的更新迅速,簡單,成本低之類的,也能像Native app一樣訪問本地的很多資源和服務,在Hybrid App領域,

有了開源PhoneGap庫等框架,JavaScript程式碼就有可能訪問手機羅盤、拍照片、尋找或建立聯絡人或約會事項,以及充分利用移動Web App無法訪問的其他許多裝置功能。

能否訪問裝置功能並不是Hybrid App和移動Web App的唯一區別。

另一個重要的區別是,Hybrid App基本上是通過應用程式商店分發的:不是用瀏覽器瀏覽至Hybrid App,而是下載和安裝它。

另外,Hybrid App的HTML頁面可以由Web伺服器來傳送,但這並不是硬性要求。為了提升效能,Hybrid App可以新增全部所需Web資源(即HTML、JavaScript、CSS和影象)的一整套副本,以便使用者可以立即訪問這些資源,而不必等Web伺服器將這些資源傳送過來。

缺點:

缺點跟Web app有點類似,除了這些區別外,Hybrid App與移動Web App有一些共同的特點。不像純粹的Native App可直接使用作業系統提供的圖形API和使用者介面服務,在Hybrid App中,大多數頁面由瀏覽器的渲染引擎來執行——就好比它們是在網頁裡面。這就意味著,目前,只有以原生方式編寫的頁面才能獲得遊戲質量的圖形.

有些應用程式只是將來自相應網站的一些頁面作為應用程式的一部分來裝入,比如美國銀行、Facebook和Yelp的iPhone應用程式。另一些應用程式包含了用HTML編寫的幾個嵌入式頁面,比如《瘋狂塔防》(Tower Madness)遊戲。但還有一些應用程式的整個使用者介面都是用HTML實現的,比如Harmounius(一種圖形畫板)或羅技公司的Squeezebox Controller。

下面是我看到一個前輩說的關於Web app 和 Hybrid app 存在的缺陷,也就是利用在原生的開發過程中嵌入Webview存在的缺陷。

但是,web實現mobie app有一些瓶頸。以下是我在專案實戰中碰到的,如果各位看官有好的解決方案,請不吝賜教。

  其一,根據百度移動網際網路發展趨勢報告2010Q4,iphone下下載一個1.407k的網頁,建立連線耗時1.35s左右,傳輸耗時0.15s左右。這樣,導致app在建立連線的時候,螢幕處於白屏狀態。也就是說這個app在一秒多的時間內,完全處於白屏狀態,再加上3G、GPRS網路的不穩定,有時候等待app響應需要幾秒甚至1幾秒的時間,這對於速度就是生命的mobie app來說,無疑是個致命的缺陷。

  其二,有人說,native app也需要建立tcp連線,同樣需要耗時這麼長時間。很對,那麼目前常用的解決方案是什麼呢。開機畫面+loading圖片,有了這兩個,程式不會處於假死狀態,使用者擁有耐心繼續等待。那麼,web app是否也能這樣做呢。首先,程式開啟同樣顯示開機畫面,畫面結束後切換介面(webview),webview如果無loading圖片依然是在建立連線,依然處於白屏狀態。因為我們無法在開機畫面的時間內對程式進行預載入。然後,使用native方式在webview外面蒙上一層,上面放上loading圖片,但是webview沒有提供web頁面開始渲染的介面,指提供了web頁面load完成的介面。也就是說,如果通過native方式在webview上放置一個loading圖片的話,那麼這個圖片指能在頁面完全載入完消失,這樣也會影響使用者體驗。這裡再提供一種方式,實現這種loading圖片的效果:放置一個靜態頁面在本地,點選開啟靜態頁面,無需建立連線。而後通過ajax方式請求資料來替換頁面內容。這種方式,也是Nokia widget的實現方式,但是這種方式的效率比較低下。

  其三,難以實現本地儲存。本地儲存是html5的一個重要成果之一,但是,基於android存在多版本系統。android低版本中的webkit對html5和css3支援的並不好。簡單的兩個例子是:input type="number"會導致低版本android的webkit直接crash,css3的圓角在低版本的android webkit中也會出現明顯裂縫。現在常用的html5向後相容方案是通過javascript+css+html來模擬html5的一些特性,但過多的js存在於mobie app中會不會得不償失。

  個人覺得,移動網際網路的發展趨勢一定也是從C/S模式向B/S模式轉變。但面臨的困難就是,手機端的瀏覽器更多,對web標準的支援也不盡相同,適配各種解析度的手機螢幕也是讓人很崩潰的一件事情。相信以後的移動網際網路也將適應現在的格局:web方式瀏覽資訊,app方式遊戲,工具等。



相關推薦

Android介面 Html5還是Native說說他們各自優缺點

曾被人問到Android介面用Html5寫有什麼優勢,當時由於沒有想過這個問題,也對html5不是很瞭解,現在在這總結一下。 android和iphone都提供了webview的控制元件,這個控制元件實質是一個webkit瀏覽器核心,用於解析html、css、js程式碼。

有哪些常見的驗證表單方式他們各自優缺點是什麼?

這裡是修真院前端小課堂,每篇分享文從 【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】 八個方面深度解析前端知識/技能,本篇分享的是: 【有哪些常見的驗證表單方式,他們各自的優缺點是什麼?】 大家好,我是IT修真院武漢分院web

Android介面回撥總結以及運用到彈窗PopWindow的Demo實現

背景: 最近專案中接觸到介面回撥,以及Android彈窗PopWindow元件的使用,現在利用學到的知識自己寫了一個簡單的Demo,練習下在Android下如何運用介面回撥,來實現彈窗PopWindow的功能。 程式碼結構: 1. 定義一個介面:OnSelectIt

Android 專案模組化開發提高開發效率

把Demo放在第一!!! 隨著需求的增加,程式碼量隨之變得龐大、臃腫。於是產生了很多影響開發效率的問題。 例如: 1. 方法數超過65K。 2. 程式編譯執行一次至少1-2分鐘。 3. 程式碼變得難以管理,影響閱讀及修改效

Android SketchImageView 載入Gif圖片解決介面不流暢卡頓問題

遇到的問題 列表載入gif圖片,用Fresco,Glide,android-gif-drawable等都能實現簡單的單個Gif圖片的載入,如果在列表上載入圖片,不做記憶體優化處理,那麼OOM就會黏著你,對於專案比較緊急,時間有限的童鞋來說,優化無疑是雪上加霜,SO,那麼給大家推薦一個簡單載入Gi

ANDROID)頂部menu隱藏進入全屏介面頂部無觸控響應

描述:menu是狀態列,用addView方式新增,在進入一個全屏介面時,需隱藏,用的是View.SYSTEM_UI_FLAG_FULLSCREEN,addView時,layoutParams屬性是FLAG_NOT_FOCUSABLE layoutParams屬性是FLAG_NO

Android軟鍵盤彈出介面整體上移終極解決方式

今天在應測試要求:軟鍵盤彈出不能遮擋EditView,在網上找了各種方案,基本都不行,比如: android:windowSoftInputMode=“adjustResize|stateHidden” 可能在一般的頁面是可以用吧。 下面來說一個曲線救國的方案,

Android入門小列子介面程式設計

1.用程式設計的方式開發介面: super.onCreate(savedInstanceState); LinearLayout layout=new LinearLayout(this);//建立一個線性佈局管理器 //設定該Activit

Android--使用顯式Intent實現從登入介面到註冊介面的跳轉

//Activity_abaka.xml --------------註冊介面 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://sch

為什麼STM32的LCD和SRAM共用了FSMC他們能不影響的正常工作

         之前使用STM32的FSMC時,還沒有注意到LCD和SRAM都共用了STM32的FSMC,那為什麼他們還能同時不影響的執行呢?       

Android實現ListView顯示資訊點選每個item跳轉到相應介面

介面如下:(做這個目的僅僅是為了學習一點小知識,因為自己才剛開始) 實現的方法比較簡單,就是定義一個ListView,然後設定監聽,ListView對每個條目的監聽是setOnItemClickListener。 onItemClick(AdapterView&

Android開發之使一開啟activity等介面Edittext獲取焦點彈出軟鍵盤java程式碼實現

// 獲取編輯框焦點 editText.setFocusable(true); //開啟軟鍵盤 IInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVI

Android軟鍵盤彈出介面整體上移

在做搜尋功能的時候,點選搜尋框,搜尋框獲取焦點,鍵盤彈出;現在問題出來了,android軟鍵盤彈出的時候,android整個介面上移,佈局被擠壓,很難看;要解決這個問題,我們需要用到 windowSoftInputMode屬性;參考:http://blog.csdn.net

Android APP自動更新時跳轉到安裝介面時出現解析失敗

1、記錄一個問題,Android APP自動更新時,跳轉到安裝介面時出現解析失敗,解決辦法: 原因是下載檔案的許可權不正確 因為安裝時會跳轉到其他應用,其他應用沒有改檔案的讀寫許可權 Intent intent = new Intent(Intent.ACTION_VIEW); in

Android從一個APP跳轉到另一個APP的主介面或某頁面並傳遞資料

1. Android 從一個 APP 跳轉到另一個 APP 主介面 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳轉應用的包名、類名 Comp

android介面開發:ViewPager的詳解並用於仿微博滑動例項和圖片滾動例項

1.ViewPager簡單使用 ViewPager是android擴充套件包android.support.v4 裡的一個繼承與ViewGroup元件,通過佈局管理器可以實現左右滑動來顯示不同的View。而這個View由PagerAdapter產生,用法類似於

html5錄音支援pc和Android、ios部分瀏覽器微信也是支援的JavaScript getUserMedia

花了兩天時間在前人基礎上重複造了一個網頁錄音的輪子,順帶把github倉庫使用研究了一下,扔到了github上,地址:https://github.com/xiangyuecn/Recorder copy之前說點什麼 準備做一個網頁版聊天介面

android介面空資料沒網路的背景互動

直接效果圖(這是模擬了一個沒有網路的時候得圖) 看下自定義的一個EmptyLayout:(來源於開源中國)因為沒什麼難度就直接貼程式碼了 package com.example.baselayoutapp; import android.content.Context;

關於 android 介面回撥的一點思考

對於android 新手來說,我們不論是在書上,還是在老師講課的時候。總是不斷聽見,當什麼什麼時候,回撥onstart()方法。那麼究竟android 回撥介面是什麼呢。 這個有興趣可以網上搜一下哈,網上文章都比我說的好。 那麼也許 你會說,你什麼***都不說, 你寫這個幹嘛

Android軟鍵盤彈出介面整體上移的問題

AndroidManifest.xml檔案中介面對應的<activity>里加入android:windowSoftInputMode="adjustPan"   鍵盤就會覆蓋螢幕android:windowSoftInputMode="stateVisible