第2講 移動終端與操做系統

移動終端的做用java

  • 移動終端是實現移動互聯的前提和基礎
  • 移動終端已經具有較強的計算、存儲和處理能力以及觸摸屏、定位、視頻攝像頭等功能組件。
  • 移動終端擁有智能的操做系統開放的軟件平臺
  • 採用智能操做系統的移動互聯網終端,除了具有短信和通話功能外,還具備網絡掃描、接口選擇、藍牙I/O、後臺處理、能量監控、節能控制、低層次內存管理、持久存儲和位置感知功能。
  • 上述功能使得移動終端在醫療衛生、社交網絡、環境監控、交通管理等領域等獲得愈來愈多的應用。

第一部分、移動終端的組成:android

  1.移動互聯網終端的硬件組成程序員

  (1)數字基帶處理器:選擇適當的移動通訊網絡,創建和維持網絡鏈接,實現話音和數據通訊,通常採用DSP實現web

  (2)應用處理器:採用嵌入式操做系統,加載多種應用協議以提供各類服務數據庫

  (3)射頻模塊:無線信號接收和發射的放大編程

  (4)電源管理部分數組

  

  2.移動互聯網硬件技術瀏覽器

   五大類技術:安全

  • 芯片組技術
  • 屏幕技
    • 顯示屏技術
    • 觸屏技術
  • 電池技術
    • 充電技術
    • 電池技術
  • 傳感器技術
  • 攝像頭技術

  

  (1)芯片組服務器

  • 基帶處理器向更高速率演進。
  • 支持多種通訊協議(HSPA+/LTE/EV-DO等),知足3G/4G/5G等多制式須要。
  • 應用處理器部分,延續ARAM演進路線,向多核及更高處理頻率、集成專業圖形處理芯片、支持更多硬件架構和標準化接口方向演進。
  • 移動芯片組向多芯片組發展,主流芯片將採用28nm及更好的工藝,減少功耗,提升集成度。

  整體來講,高集成度、高速率、支持多種操做系統、多制式以及低功耗將是將來的發展方向。

   (2)屏幕技術

  屏幕技術:對屏幕評價,可從屏幕顏色、屏幕材質和屏幕尺寸三個方面進行。

  • 顯示屏技術
    • 背光源演進:節電、長壽命、快速反應。
    • 驅動方式演進:實現像素獨立控制、提升反應速度、精確控制灰度。
    • 顯示分類演進:更大視角、更高亮度和更薄的厚度。
  • 觸屏技術
    • 透射式電容屏技術:單片玻璃方案(Touch on Lens)、On-cell方案(三星)和In-cell方案(LG等)。
    • 用戶體驗角度看,軟性屏幕、觸感壓力、紅外輸入和電磁筆是交互方式的將來演進方向。

  總體看,顯示屏的發展方向是更大尺寸、高清、低功耗、更好的顯示技術以及更加精確的人性化輸入。

   (3)傳感器技術

  傳感器技術:是向用戶提供更多功能的基礎。

  • 加速度感應器:提供高精度、提供更加準確的信息。
  • 陀螺儀:支持3D UI、旋轉UI等操做。
  • 除了光線感應器、距離感應器和重力感應器等傳統的主流感應器外,更多的感應器如化學感應器、氣壓感應器等將逐步出如今移動終端上,推進移動終端向向全感知的方向發展。

   (4)攝像頭技術

   攝像頭技術:更低噪聲、更高像素是發展的主線,還將具備可變光圈(依據光線自動調節光圈)、紅外攝像等功能。

   (5)電池技術

  電池技術:續航能力是關鍵,沒有更長的續航時間,就沒法爲用戶提供更好的移動互聯網體驗。鋰電、太陽能電池、無線充電和燃料充電、動力充電等都是電池技術將來發展的方向。

   3.移動互聯網軟件技術

     操做系統是基礎

    基礎中間件、業務中間件、通訊中間件實現應用支撐

    • 本地應用
    • Web應用

     

    系統閉源/封閉文件管理系統/接口開放模式:以IOS爲表明,系統不開放源碼,也不提供本地文件系統功能,提供開放的接口,能夠供第三方進行應用開發。

      用戶得到最穩定、安全的應用程序,爲第三方盈利提供了良好的基礎,用戶只能從固定渠道下載應用,經過不一樣方式管理不一樣類多媒體文件。

    系統閉源/開放文件管理系統/接口開放模式:以Windows Mobile爲表明,系統不開放源碼,提供本地文件系統功能,提供開放的接口,能夠供第三方進行應用開發。

      可多渠道下載應用,操做系統可選擇認證或不認證,靈活性高,不認證容易出現安全性問題。

    系統開源/開放文件管理系統/接口開放模式:以Android和Windows CE爲表明,系統開放或部分開放源碼,提供本地文件系統功能,提供開放的接口,能夠供第三方進行應用開發。

      可進行深度定製,可知足不一樣用戶須要,系統版本分化,易出現兼容性問題。

    三種模式同時演進,整體上看,在保持靈活性的基礎上儘可能避免版本分化、加強系統對應用的認證及更深度開放API,將是操做系統將來發展的方向。

   4.移動終端硬件

  • 芯片組:高集成度、高速率、支持多種操做系統、多制式以及低功耗將是將來的發展方向。
  • 顯示器:顯示屏的發展方向是更大尺寸、高清、低功耗、更好的顯示技術以及更加精確的人性化輸入。
  • 傳感器:全感知方向發展。
  • 攝像頭:更低噪聲、更高像素是發展的主線,還將具備可變光圈(依據光線自動調節光圈)、紅外攝像等功能。
  • 電池:續航能力是關鍵。鋰電、太陽能電池、無線充電和燃料充電、動力充電等都是電池技術將來發展的方向。

  5.移動終端軟件

  •  操做系統:操做系統是基礎
    • 系統閉源/封閉文件管理系統/接口開放模式
    • 系統閉源/開放文件管理系統/接口開放模式
    • 系統開源/開放文件管理系統/接口開放模式
    • 避免版本分化、加強系統對應用的認證及更深度開放API,將是操做系統將來發展的方向
  • 中間件:基礎中間件、業務中間件、通訊中間件實現應用支撐
  • 應用軟件:本地應用和web應用

 第二部分、Android操做系統

 

什麼是Android?

  •  Android是一種以Linux爲基礎的開放源碼操做系統,主要用於便攜設備。
  • Android是Google於2007年11月5日宣佈的基於Linux平臺開源手機操做系統名稱,該平臺由操做系統、中間件、用戶界面和應用軟件組成。

   

  (一)Android的體系構架

   

  1.Android的體系架構

  1. 應用層。由運行在Dalvik虛擬機上的應用程序(主要由Java語言編寫)組成,例如日曆、地圖、瀏覽器、聯繫人管理等。  

      Dalvik虛擬機是Google爲Android專門設計的基於寄存器的Java虛擬機,運行Java程序的速度比JVM更快。

    2.框架層。主要由View、通知管理器(Notification Manager)、活動管理器(Activity Manager)等由開發人員直接調用的API組成(這些API主要也由Java語言編寫)。

    3.系統運行庫層。對框架層提供支持。經過Java訪問硬件,必須使用NDKnative Development Kit)。

      NDK是一些由C/C++語言編寫的庫(主要是.so文件),這些庫是系統運行庫層的組成部分,該層還包括C語言標準庫、多媒體庫、OpenGL ES、SQLite、Webkit、Dalvik虛擬機等。

    4.Linux內核層。主要包括驅動、內存管理、進程管理、網絡協議棧等組件。

  2.Android的應用類型   

     

  3.Android的應用程序框架-框架層組件

     主要指應用開發中所使用的Android SDK中類、接口的集合

  • android.app:程序模型和基本運行環境(Application、Activity、Fragment、Service等)
  • android.appwidget:窗口小部件(Widget)的建立與管理
  • android.bluetooth:藍牙設備管理與適配
  • android.content:內容管理、得到與發佈
  • android.database:數據庫操做與管理
  • android.drm:內容數字版權與加密保護
  • android.gesture:觸摸及手勢操做
  • android.graphics:底層圖形庫,包括畫布、顏色過濾、點、矩形等,能夠將其直接繪製到屏幕上,還包括PDF文檔的生成和動畫等
  • android.hardware:硬件管理與操做,包括相機、傳感器、顯示、指紋、輸入設備和USB設備等
  • android.icu:國際化語言組件
  • android.inputmethodservice:輸入法服務組件
  • android.location:位置服務組件,包括地理座標、GPS、位置等
  • android.media:音視頻資源管理與訪問組件
  • android.mtp:媒體傳輸協議
  • android.net:網絡管理與服務組件,包括HTTP、網絡服務發現(NSD)、實時傳輸協議(RTP)、網絡電話、wifi發現與管理
  • android.nfc:NFC設備的適配與管理服務組件
  • android.opengl:OpenGL工具類
  • android.os:系統服務組件,包括電池管理、存儲管理、消息傳輸等
  • android.preference:偏好或首選項管理組件
  • android.print:打印管理組件,包括PDF打印
  • android.printservice:打印服務
  • android.provider:內容提供者,包括日曆、聯繫人、媒體庫、電話等
  • Android.renderscript :高效計算和快速渲染組件
  • android.sax:XML訪問組件
  • android.security:安全和祕鑰管理組件
  • android.sevice:服務組件,包括語音、媒體、VR等服務組件
  • android.speech:包括語音識別和文本轉語音等
  • android.system:系統組件
  • android.telcom:通訊組件
  • android.telephony:與撥打電話相關
  • android.test:用於測試android應用程序的框架
  • android.text:文本組件,包括文本格式和相關實用組件
  • android.transition:轉場動畫、變換動畫和連貫性交互
  • android.util:實用工具類
  • android.view:基礎的用戶界面接口框架
  • android.webkit:默認的瀏覽器內核操做接口
  • android.widget:包含android SDK提供的大部分UI控件

   4.Android的四大應用程序組件

  •  Activity:應用程序入口;界面顯示,接收事件,控制顯示跳轉。
  • BroadcastReceiver:用於註冊和接收系統廣播的事件;接收自定義廣播事件。
  • ContentProvider:提供數據庫查詢接口;對外(也就是「其餘應用程序」)公開數據查詢服務。
  • Service:獨立進程,可一直在後臺運行;能夠與其餘組件(如AcitivityServiceContentProvider)經過遠程鏈接綁定進行交互;可對外提供服務交互接口;生命週期不依賴於其餘組件。

   5.Activity

   (1)Activity狀態

    • 激活或運行狀態:當Activity在屏幕前臺時(位於當前任務堆棧的頂部),處於激活或運行狀態。
    • 暫停狀態:當Activity上面有另一個Activity,上面的Activity沒有徹底覆蓋它或透明,下方的Activity仍然對用戶可見,處於暫停狀態,而且是存活狀態(保留全部的狀態和成員信息並保持和窗口管理器鏈接),系統內存不足時會殺死這個Activity。
    • 中止狀態:當Activity徹底被另外一個Activity覆蓋時處於中止狀態,仍保留全部的狀態和成員信息, 該Activity不可見。

   (2)Activity的生命週期

     

  (3)Activity的主要生命週期方法

  •  onCreate():建立activity時調用。以Bundle的形式提供對之前儲存狀態的訪問。
  • onStart()activity變爲在屏幕上對用戶可見時調用。
  • onResume()activity開始與用戶交互時調用(不管是啓動仍是從新啓動一個activity,該方法老是被調用的)。
  • onPause()activity被暫停或收回資源時調用,該方法用於保存activity狀態,也是保護現場,至關於壓棧。
  • onStop()activity被中止並轉爲不可見階段及後續的生命週期事件時調用。
  • onRestart():從新啓動activity時調用。該activity仍在棧中,不啓動新的activity。
  • onDestroy()activity被徹底從系統內存中移除時調用,該方法被調用多是由於程序直接調用onFinish()方法或者系統決定中止該activity以釋放資源。

   (二)Android開發環境的創建

   1.Android開發環境的構成

      Android開發工具:JDK + IDE + Android SDK + ADT   

  2.Android 軟件開發工具包

  完整可運行的 Android  軟件開發工具包由三個組件組成

  • Android SDK tools
  • Android SDK Platform-Tools
  • SDK Platform Android API

  Android SDK tools爲開發提供調試和測試工具並提供對整個軟件工具包的更新功能。

  Android SDK Platform-Tools提供平臺(也就是不一樣版本的Android系統)所須要的軟件。

  SDK Platform Android API是Android SDK的核心,提供開發所須要的庫和代碼,分版本(好比2.二、4.四、7.0等)。

   Android ADT:爲IDE設計的Android應用程序插件。ADT擴展了IDE功能,能夠快速創建新的Android項目。

     ADT添加了基於Android框架API的組件,可以使用Android SDK調試應用程序,ADT提升了Android應用程序的開發效率。

  Android NDK:容許Android應用開發者嵌入從C、C++源代碼文件編譯出的本地機器代碼到各自的應用軟件包中。

  3.JDK的安裝及Java環境配置

  •  首先下載並安裝JDK
  • 下載並安裝 (My)Eclipse IDE for Java Developers(或AS)
  • 從官網上下載最新版本的Android SDK,分爲Windows,Mac OS,Linux3種版本
  • 設置或配置Android SDK環境變量ANDROID_PATH
  • 能夠經過SDK Manager管理android sdk的更新和升級

  (三)Android的基本組件

   1.Android應用程序的構成

   

  2.Android的可視化組件

    

  3.View組件

   View組件是構成 Android UI 的必選組件,是Activity組件的重要組成成分。

  Android 的任何可視化組件都需從android.view.View類繼承。

  •  可以使用XML配置生成View,而後裝載View
  • 也可經過代碼建立View

  Android的視圖分爲三種,都是android.view.View類的子類。

  • 佈局(Layout
  • 視圖容器(View Container)類
  • 視圖類

  Android.view.ViewGroup 是一個容器類,也是View 類的子類,全部的佈局類和視圖容器類都是ViewGroup的子類。

   (1)View組件的類圖

     

  (2)使用XML佈局文件定義視圖

     

  • XML佈局文件是Android 系統中定義視圖的經常使用方法,若當前主佈局文件爲 <main.xml>,須要在 Activity onCreate()方法中指定XML佈局文件的資源ID。

                      setContentView( R.layout.main )

  • 若是想得到在 main.xml 文件中定義的某個View :

       EditText edittext1 =(EditText)findViewById(R.id.sample_edit_text0);

       Button button1 = (Button) findViewById(R.id.sample_button0);

  • 爲了不形成歧義或佈局錯誤,同一個佈局文件中應該使視圖ID值惟一。

   (3)在代碼中控制視圖

     

    

  4.Activity組件

    

  (1)建立Activity

   任何Activity應用類都必須從Activity類或者其子類中繼承。

  覆蓋Activity類的onCreate()方法。默認狀態下Activity類中沒有任何控件,屏幕頂端有一個默認的標題欄,要想在Activity中添加控件,最直接的辦法就是在onCreate()方法中裝載XML佈局文件或使用代碼添加控件。

  注意

  • 不能在Activity構造方法中初始化控件 或 裝載View。
  • 不要在Activity中添加帶參數的構造方法,若是必需要添加,則必須包含一個無參數構造方法。

   (2)配置Activity

     

  (3)顯示其它的Activity

   Android應用一般包含多個Activity,會涉及MainActivity中調用其它Activity的問題,Android不容許建立Activity對象實例並進行顯示,只能使用 android.content.Intent 做爲中間代理,並使用 startActivity startActivityForResult 方法建立並顯示Activity

   

  (4)在不一樣Activity之間傳遞數據

   窗體切換過程當中一般會發生數據傳遞,Android中傳遞數據的方法有不少,常見的方法:

  • 經過 Intent 傳遞數據(最經常使用的數據傳遞方法)
  • 經過靜態(static)變量傳遞數據
  • 經過剪貼板(clipboard)傳遞數據
  • 經過全局變量傳遞數據

   ①經過 Intent 傳遞數據

    經過IntentputExtra方法將簡單類型的數據或可序列化的數據保存在Intent對象中,在目標Activity中使用getXxx方法( getint()或者getString() )方法得到這些數據。  

     

  ②使用靜態變量傳遞數據:使用Intent傳遞數據也存在侷限性,沒法傳遞不能序列化的對象,也就是沒有實現java.io.Serializable接口的類對象,靜態變量法是一種方便且易用的傳遞數據方法。

  ③使用剪貼板傳遞數據:幾乎全部的系統均支持剪切板技術,可將某些數據事先複製到剪切板上,其它任何程序都可從剪切板中得到這些數據。

  ④使用全局對象傳遞數據:因爲大量的靜態變量可能引起內存溢出,代碼可維護性較差,可用全局變量代替靜態變量來完成數據傳遞。

   5.Fragment組件

     

  (1)動態使用

     要管理Fragment,需使用FragmentManager,FragmentManager完成以下功能

        ①使用方法findFragmentById()findFragmentByTag(),獲取activity中已存在的fragment。

        ②使用FragmentManager打開FragmentTransaction來執行fragment的事務,添加或刪除fragment。

     

  (2)靜態使用

    這是使用Fragment最簡單的一種方式,把Fragment當成普通的控件,直接寫在Activity的佈局文件中

      ①繼承Fragment,重寫onCreateView 肯定 Fragemnt 佈局。

      ②在Activity中聲明此Fragment,和普通的View同樣。

  6.Intent組件

   定義執行某種工做的「意圖」,用Intent可執行的任務包括:

  • 廣播消息
  • 啓動Service
  • 啓動Activity
  • 顯示網頁或聯繫人
  • 撥出或接聽電話等

  Intent並不老是由應用程序發起,系統也會使用Intent嚮應用程序通知特定的事件(好比短消息到達通知或來電通知等)。

  Intent能夠是顯式或隱式的,Intent將操做和操做處理程序鬆散的耦合在一塊兒。

   (1)Intent組件的做用

   三大核心組件(ActivityServiceBroadcastReceiver)之間經過Intent消息機制實現交互。Intent是對一個將要執行動做的抽象描述,通常做爲參數使用

  • 調用startActivity()啓動一個activity
  • broadcastIntent()傳遞給全部感興趣的BroadcastReceiver
  • startService()bindservice()啓動一個後臺service

   (2)Intent的組成

    Intent屬性:Action, Data, Category, Type, ComponentExtras

  • Action:表示要實施的動做,如ACTION_VIEWACTION_EDIT等。參照Android.content.intent類,constants中定義了全部action。
  • Category:指定action的執行環境。
    • LAUNCHER_CATEGORY 表示Intent 接受者應該在Launcher中做爲頂級應用出現。
    • ALTERNATIVE_CATEGORY表示當前Intent是一系列可選動做中的一個,這些動做能夠在同一塊數據上執行。

     

  • Data:要實施的具體數據,通常由Uri變量表示,經過設置data,能夠執行打電話,發短信,開發網頁等操做。

     

  • Type:顯式指定Intent的數據類型。通常Intent的數據類型可以根據數據自己進行斷定,經過設置該屬性,能夠強制採用顯式指定的類型而再也不進行額外的斷定。
    • 設置data時,系統會默認將type設置爲null,設置type時,系統會默認將data設置爲null。通常狀況下,datatype只須要設置一個,若是既想設置data又想設置type,那麼可使用setDataAndType()。

     

  • Component:指定Intent目標組件的類名稱。一般Android會根據Intent 中包含的其它屬性信息,好比actiondata/typecategory進行查找,最終找到一個與之匹配的目標組件。可是,若是指定component屬性,將直接使用它指定的組件,而再也不執行上述查找過程。指定了該屬性後,Intent的其它全部屬性都是可選的。
  • Extras:是全部附加信息的集合。使用extras可爲組件提供擴展信息,好比,若是要執行「發送電子郵件」,能夠將電子郵件的標題、正文等保存在extras裏,傳給電子郵件發送組件。

   (3)Intent解析

    Intent分爲顯式和隱式

    • 顯式Intent用於應用內部組件之間消息傳遞
    • 隱式Intent則用於多個應用程序之間的交互
    • Intent Filter匹配的三要素是ActionData以及Category
    • 隱式Intent請求要可以傳遞給目標組件,必需要經過三個要素檢查,任何一項不匹配,不會將隱式Intent傳遞給目標組件

    組件中一般可聲明多個Intent Filter。每一個IntentFilter描述組件能響應Intent請求的能力。好比在須要請求網頁瀏覽器時,網頁瀏覽器程序的Intent Filter就應該聲明它所但願接收的Intent ActionWEB_SEARCH_ACTION,以及與之相關的請求數據是網頁地址URI格式

   (4)Action匹配

   <intent-filter>元素中能夠包括子元素<action>,好比:

    <intent-filter>

      <action android:name=」com.example.project.SHOW_CURRENT」 />

      <action android:name=」com.example.project.SHOW_RECENT」 />

      <action android:name=」com.example.project.SHOW_PENDING」 />

     </intent-filter> 

  每一個<intent-filter>至少包含一個<action>,若Intent請求的Action和<intent-filter>中某一條匹配,則匹配成功。若Intent請求或<intent-filter>中沒有說明具體的Action類型:

      (1) 若是< intent-filter>中沒有包含Action類型,那麼不管什麼Intent請求都沒法和這條<intent-filter>匹配。

      (2) 若是Intent請求中沒有設定Action類型,只要<intent-filter>中包含  Action類型,這個Intent請求就將順利地經過<intent-filter>的匹配。

   (5)Category匹配

   <intent-filter>元素可包含<category>子元素,好比:

    < intent-filter . . . >

    < category android:name=」android.Intent.Category.DEFAULT」 />

    < category android:name=」android.Intent.Category.BROWSABLE」 />

    < /intent-filter> 

  當Intent請求中的Category與組件中某一個Intent Filter<category>徹底匹配時,該Intent請求將成功匹配。

  Intent Filter中多餘的<category>聲明並不會致使匹配失敗。一個沒有指定任何類別匹配的 Intent Filter只會匹配沒有設置類別的Intent請求。

   (6)Data匹配

   數據在<intent-filter>中的描述以下: 

    < intent-filter . . . >

      <data android:type=」video/mpeg」 android:scheme=」http」 . . . />

      <data android:type=」audio/mpeg」 android:scheme=」http」 . . . />

     </intent-filter> 

  指定但願接受的Intent請求的URI和數據類型

  URI分爲三個部分:schemeauthoritypath進行匹配時,用 setData()設定的URI數據類型和scheme必須與Intent Filter中所指定的一致。若Intent Filter中還指定了authoritypath,也須要進行匹配。

   7.Service組件

   主要用於沒有用戶界面,但須要長時間在後臺運行的應用,Service分爲本地Service和遠程Service,本地Service是隻能由承載該Service的應用程序訪問的組件,而遠程Service則可由設備上運行的其它應用程序遠程訪問,好比郵件輪詢應用等。

   

  (1)採用startService啓動服務

     

  (2)採用bindService啓動服務

     

  (3)Broadcast Receiver組件-概述

  • BroadcastReceiver用於異步接收廣播Intent,包括Normal broadcastsOrdered broadcasts兩類,前者屬於徹底異步工做模式,後者則是有序模式,每一個receiver執行後能夠傳播到下一個receiver,也能夠停止傳播
  • BroadcastReceiver一般不能提供可視化的界面來顯示廣播信息。可使用NotificationNotification Manager來實現可視化信息界面,顯示廣播信息的內容,圖標等。
  • 一個BroadcastReceiver對象只有在被調用onReceive(Context, Intent)時纔有效的,從onReceive函數返回後,該對象就變爲無效且結束生命週期。

   (4)Broadcast Receiver組件-發送和接收廣播

  •  事件廣播比較簡單,首先構建Intent對象,而後調用sendBroadcast(Intent)方法將廣播發出:

             Intent intent = new Intent(String action);

             sendBroadcast(Intent);

  • 接收廣播經過定義一個繼承BroadcastReceiver類來實現,繼承該類後覆蓋其onReceiver方法,並在該方法中響應事件

       public class SReceiver extends BroadcastReceiver {

          @Override

          public void onReceive(Context context, Intent intent) {

            //get data from intent

            Bundle bundle = intent.getExtras();

            if (bundle != null){}

   (5)Broadcast Receiver組件-註冊Receiver

    

   

  8.Content Provider組件

  • ContentProviderAndroid系統提供的一種標準的共享數據機制,應用程序能夠經過ContentProvider訪問其它應用程序的私有數據,私有數據能夠是存儲在文件中的數據,也能夠是SQLite中的數據。
  • Android系統內部提供一些內置的ContentProvider,可以爲應用程序提供重要的數據信息。
  • 雖然使用其餘方法也能夠對外共享數據,但數據訪問方式會因數據存儲的方式而不一樣,如:採用文件方式對外共享數據,須要進行文件操做讀寫數據;採用sharedpreferences共享數據,須要使用sharedpreferences API讀寫數據。而使用ContentProvider共享數據的好處是統一了數據訪問方式。

   (1)共享數據

  •  第一步:繼承ContentProvider並重寫下面方法:

  public class PersonContentProvider extends ContentProvider{

          public boolean onCreate()

          public Uri insert(Uri uri, ContentValues values)

          public int delete(Uri uri, String selection, String[] selectionArgs)

         public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)

        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

        public String getType(Uri uri)

  }  

  •  第二步:在AndroidManifest.xml使用<provider>配置ContentProvider,爲了能讓其餘應用找到該ContentProvider,ContentProvider採用authorities(主機名/域名)進行惟一標識,可把 ContentProvider看做一個網站,authorities 就是他的域名:

        <manifest .... >

             <application android:icon="@drawable/icon"       

                                 android:label="@string/app_name">

                    <provider android:name=".PersonContentProvider"   

                    android:authorities="cn.itcast.provider.personprovider"/>

            </application>

        </manifest>

   (四)Android程序的基本結構

   1.Android應用程序的結構

  • src:存放java源代碼文件,全部容許修改的java文件和用戶本身添加的java文件都保存在這個目錄中。
  • gen(generated)包含ADT自動生成的java代碼文件,例如R.java,該目錄下的文件是系統自動維護的。
  • R.java文件是ADT自動生成的文件,包含對drawablelayoutstring目錄內的資源的引用指針,Android程序可以直接經過R類引用目錄中的文件,若添加和修改了引用的資源文件,須更新R.java文件中的代碼。
  • Android.jar文件是Android程序所能引用的函數庫文件,Android經過平臺所支持的API都包含在這個文件中。
  • res目錄是資源目錄,保存應用程序用到的全部資源文件,含三個主要子目錄,該目錄下文件發生變化時,編譯後自動生成的R.java就會發生變化
    • drawable目錄用來保存圖像文件
    • layout目錄保存與用戶界面相關的佈局文件
    • values目錄保存字符串、顏色、風格和主題等常量數據
  • HelloAndroid工程中,ADTdrawable目錄中自動引入了程序的圖標文件(png文件),在layout目錄生成了mail.xml文件,用於描述用戶界面,在values目錄中生成了strings.xml用來定義應用中的字符串常量。
  •  AndroidManifest.xmlXML格式的Android程序聲明文件,包含了Android系統運行Android應用程序前所必須掌握的重要信息,這些信息包含應用程序名稱、圖標、包名稱、模塊組成、受權和SDK最低版本等,每一個android程序都必須包含該文件。
  • AndroidManifest.xml文件相似於Java EE中的web.xml文件,定義了應用程序的內容和行爲。例如,該文件可列出應用程序的ActivityService,以及運行應用程序所須要的權限和功能。

   2.Android的資源

  •  在Android 程序結構中,資源扮演着重要的角色。Android中的資源一般綁定到文件(好比音樂文件)或(好比對話框的標題),這些文件和值綁定到可執行程序的方式很友好,無需從新編譯和從新部署應用程序就可以更改。
  • Android主要經過兩種文件類型來支持資源:XML文件原始文件(包括圖像、音頻和視頻),有時XML文件總體就是一個資源(好比字符串資源文件和佈局資源文件)。

   3.XML文件做爲Android資源

   XML文件做爲Android資源分爲三種狀況

  • XML文件做爲資源需編譯爲二進制文件,而後打包到應用程序,這些XML文件具備預約義的格式,其中XML節點被轉換爲ID。
  • 某種自由格式的XML文件做爲資源,需編譯爲二進制格式,但該XML文件不會被解釋,也不會生成資源ID,可經過XML閱讀器來讀取該類XML文件。
  • XML放到raw目錄下,此時不須要將該文件編譯爲二進制格式,必須使用明確的基於流式傳輸的API來讀取文件,好比音視頻文件。

  若是XML文件位於res/values子目錄之外的任何地方,ID會基於文件名產生,不然,會根據文件的內容來生成ID。

   4.Android的關鍵資源

  •  顏色:表示指向顏色編碼的顏色標識符,公開表示爲R.color.*
  • 字符串:表示字符串資源,公開表示爲R.string.*
  • 字符串數組:表示字符串數組資源,公開表示爲R.array.*
  • 尺寸:表示各類元素或視圖的尺寸和大小,公開表示爲R.dimen.*
  • 圖像:表示圖像資源,支持的圖像格式包括jpg、png、gif。表示爲R.drawable.*
  • 色圖:表示用做視圖背景的矩形色塊或普通圖形對象,好比位圖。公開表示爲R.drawable.*
  • 任意XML文件:公開表示爲R.xml.*
  • 任意原始資源,表示爲R.raw.*

   5.資源引用

   

  6.AndroidManifest.xml文件結構

     

  (1)AndroidManifest.xml的功能

   AndroidManifest.xml文件是Android應用程序中最重要的文件之一,是android應用程序的全局配置文件。該文件位於應用程序的根目錄下,描述了package中的全局數據

  • 指定應用程序的Java包,包名做爲應用程序的獨特標識
  • 描述應用程序組件,包括ActivityServiceBroadcast ReceiverContent Provider等。指定了實現每一個組件的類並公開發布它們的能力(例如,它們持有哪一個Intent信息)
  • 決定那些進程將容納應用程序組件
  • 聲明本應用程序必須擁有哪些許可,以便訪問API的被保護部分,以及與其餘應用程序交互
  • 聲明其餘應用程序在和該應用程序交互時須要持有的許可
  • 聲明該應用程序所需的Android API的最小版本
  • 列出該應用程序必須連接的庫

   (2)AndroidManifest.xml的主要結構及規則

     

    

    

    

 第三部分、IOS操做系統

  1、IOS系統介紹

   IOS 是一個基於UNIX內核的操做系統

  IOS有一個基於 微內核(將系統內核的部分任務交給用戶層進程處理) Mach 的Darwin內核,該內核也屬於BSD家族。

  微內核提供一組「最基本」的服務,如進程調度、進程間通訊、存儲管理、處理I/O設備。其餘服務,如文件管理、網絡支持等經過接口連到微內核。

  微內核的全部服務均在用戶模式下運行,而處理這些服務與處理其餘任何程序同樣。由於每一個服務只是在本身的地址空間運行,服務之間彼此之間都受到了保護。

    

  1.大內核與微內核

    

  2.IOS系統

  •  IOS有一個叫作 Cocoa Touch 的運行時框架, Cocoa Touch框架重用了許多 Mac 系統的成熟模式,但更多專一於觸摸的接口和優化, Cocoa Touch 具備和 iPhone 用戶接口一致的特殊設計。
  • IOS使用Objective-C(一個C語言的超集)做爲開發語言,Objective-C 的95%是C, Objective-C 運行時核心是消息分發。
  • 大部分Cocoa Touch功能是用Objective-C實現的。Objective-C 是一種面向對象的語言,編譯運行速度很快,採用了真正的動態運行時系統,從而增添了靈活性。
  • Java只有自動內存回收,Objective-C支持自動與手動內存回收,IOS只有手動內存回收,可手動管理內存,在用戶操做間歇由程序員進行回收,所以用戶不會在頻繁使用過程當中感覺到停頓。

   3.Objective-C與Runtime交互

  •  Objective-C是一門動態語言,把部分工做從編譯鏈接時推遲到運行時,所以只有編譯器是不夠的,還須要一個運行時系統 執行編譯後代碼,這是 Objective-C Runtime 系統存在的意義。
  • Objective-C從三個不一樣層級上與Runtime系統進行交互

    (1) 經過 Objective-C 源代碼:動態語言部分工做直接交給Runtime執行,類、方法和協議在Runtime均有對應數據結構。

    (2) 經過 Foundation 框架的NSObject類定義的方法。在運行時得到類的信息,並檢查一些特性。

    (3) 經過對 Runtime 函數直接調用 。 Runtime 系統是一個由一系列函數和數據結構組成,具備公共接口的動態共享庫。

   4.IOS基於硬件加速

  •  IOS系統對圖形的各類特效處理是基於 GPU 硬件進行加速的,它能夠不用徹底藉助 CPU 或者程序自己,而是經過 GPU 進行渲染以達到更流暢的操控表現。
  • Android 並不是如此,由於Android系統須要適應不一樣的手機硬件,須要知足各類差別配置,因此不少圖形特效都要靠程序自己進行加速和渲染,強依賴於CPU的運算,圖形操做會加大處理器負荷,從而出現卡頓問題。雖然Android 高版本系統中已經將硬件加速設爲默認開啓,但依舊沒法作到全部特效均靠 GPU 進行加速。

   2、IOS系統架構及iPhone應用程序框架

   1.iPhone系統架構

   

  2.Framework介紹

  • Framework 相似於Windows 庫,但比Windows庫更增強大,經過 Framework可共享全部形式的資源,包括:
    • 動態共享庫
    • nib文件(Interface builder文檔)
    • 圖像字符資源
    • 文檔

 

  • IOS系統會在須要時將Framework載入內存,多個應用程序可同時使用同一個Framework,內存中只須要存在一份拷貝。

 

  • Framework同時也是一個bundle(相似於一個目錄),既能夠在 finder 裏瀏覽其內容,也能夠在代碼中經過 NSBundle 訪問。

 

  •  利用Framework 可實現動態或靜態庫功能,與動態/靜態庫相比,Framework 有以下優點:

  (1)能將不一樣類型資源統一打包,易安裝、易卸載與定位。

  (2)能進行版本管理,使Framework能不斷更新並向後兼容。

  (3)同一時間,即便有多個應用程序使用同一Framework,但內存中只有一份Framework只讀資源拷貝,減小了內存佔用。

   3.iPhone系統(IOS)架構介紹

  •  IOS 扮演底層硬件和應用程序中介。應用程序不能直接訪問硬件,須要和系統接口交互,由系統接口和驅動打交道。這樣的抽象能夠防止應用程序改變底層硬件。
  • IOS 實現能夠看做是多個層的集合,底層爲全部應用程序提供基礎服務,高層則包含一些複雜的服務和技術。
  • 在編寫代碼時,應儘量使用高層框架,而不使用底層框架。高層框架爲底層構造提供面向對象的抽象,可減小代碼行數,同時還對諸如socket和線程等複雜功能進行封裝,從而讓編寫代碼變得更加容易。
  • 雖然說高層框架是對底層構造進行抽象,可是它並無把底層技術屏蔽起來。若是高層框架沒有爲底層框架的某些功能提供接口,開發者能夠直接使用底層框架。

   

  4.IOS開發架構

   

   5.Cocoa Touch層

  • Cocoa Touch IOS架構中最重要層之一。該層包含開發IOS應用程序的關鍵框架。當開發IOS應用時,開發者將從這些框架開始,而後向下追溯到須要的較低層框架。
  • Cocoa Touch層主要包括 UIKitFoundation Framework。
  • Cocoa Touch層提供了基本系統行爲支持若要實現更爲複雜的行爲和界面,可考慮向下層探尋技術支持。

  

  (1)Cocoa Touch層包含的框架

  •  UIKit 框架 (UIKit.framework):實現圖形和事件驅動程序
  • Foundation框架(Foundation.framework):包括文件、網絡處理等
  • Map Kit 框架 (MapKit.framework):提供可嵌入到應用程序的地圖界面
  • Message UI 框架  (MessageUI.framework):用於撰寫電子郵件
  • Address Book UI 框架 (AddressBookUI.framework):建立或編輯聯繫人信息的標準系統界面
  • Event Kit UI 框架(EventKitUI.framework):提供視圖控制鍵查看並編輯事件
  • Game Kit 框架(GameKit.framework):支持點對點鏈接及遊戲內語音功能
  • iAd 框架 (iAd.framework):經過該框架在應用程序中發佈橫幅廣告。廣告會被放入到標準視圖

   (2)UIKit框架的類

     

  • UIView類定義了視圖的基本行爲,但並不定義其視覺表示。UIKit經過其子類爲文本框、按鍵及工具條等標準界面元素定義了具體的外觀和行爲。
  • 包含Objective-C程序接口,提供圖形、事件驅動的等功能。IOS每一個應用均採用該框架實現應用管理、圖形與窗口、觸摸事件處理、用戶接口管理等。

  具體功能包括:

    • 應用程序管理、用戶界面管理、圖形和窗口支持、多任務支持
    • 視圖、觸摸及移動事件、動畫
    • 推送通知、本地通知的調度與發送、建立PDF
    • 內置相機、電池、傳感器等

  (3)Fundation框架

   Foundation FrameworkUI 框架的基礎, NSObject 就處在該框架之中,主要功能包括

  • 定義值對象、集合、文件系統、URL、進程通訊等對象
  • 定義經常使用結構體,好比NSRangeNSPointNSSize
  • 定義日期操做
  • 定義字符串、數組、字典等對象
  • 定義裝箱、拆箱、反射等操做

   

  6.Media層

  •  Media層包括圖像、音頻和視頻技術,可在手機上建立多媒體體驗和視聽效果
  • 利用Media層框架可快速地建立圖像和動畫
  • Media層包括
    • 圖形圖像技術(Quartz 圖形繪製引擎、Core Animation動畫 和 OpenGL ES
    • 音頻技術(Core AudioOpenAL
    • 視頻技術(Core Video

   

  7.圖像技術(Graphics Technologies)

   高質量圖像是全部iPhone應用的重要組成部分。任什麼時候候,開發者能夠採用UIKit框架中已有的視圖和功能以及預約義的圖像來開發iPhone應用。然而,當UIKit框架中的視圖和功能不能知足需求時,開發者可用下列技術和方法來製做視圖。

       ①Quartz

       ②Core Animation

       ③OpenGL ES

   8.音頻技術(Audio Technologies)

  •  IOS 音頻技術爲用戶提供了豐富的音頻體驗。包括音頻回放、高質量錄音和觸發設備振動功能等。
  • IOS的音頻技術支持的音頻格式包括:AAC(高級音頻編碼格式)、ALAC(蘋果無損音頻壓縮編碼格式)、A-law(一種脈衝壓縮格式)、IMA/ADPCM(IMA4)Linear PCMμ-lawCore Audio等。

         ① Core Audio :提供音頻本地支持,可生成、錄製、混合和播放音頻,也能經過核心音頻訪問手機設備振動功能。

         ② OpenAL是一個跨平臺的標準,採用OpenAL的代碼模塊能夠平滑地移植到其餘平臺。

  9.視頻技術(Video Technologies)

  •  IOS經過媒體播放框架支持全屏視頻回放,支持的視頻文件格式包MOVMP4M4V3GP
  • 應用以下壓縮標準:

  ① H.264 Baseline Profile Level 3.0 video,在30f/s 的狀況下分辨率達到640×480像素。
  ② MPEG4規範的視頻部分。
  ③ 衆多的音頻格式,包含在音頻技術的列表裏,如AAC、Apple Lossless (ALAC)、A-law、IMA/ADPCM(IMA4)、線性PCM、μ-law和Core Audio等。

   10.Core Service層

   

  (1)Core Service層框架-電話本框架

   電話本框架:提供手機設備中電話本編程接口。開發者能使用該框架訪問和修改存儲在用戶聯繫人數據庫裏的記錄。

    IOS應用程序可使用該框架得到聯繫人列表。

   (2)Core Service層框架-核心基礎框架

    核心基礎框架是基於C語言的接口集,提供iPhone應用的基本數據管理和服務功能:

    • Collection數據類型(Arrays、 Sets等)
    • Bundles
    • 字符串管理
    • 日期和時間管理
    • 原始數據塊管理
    • 首選項管理
    • URLStream操做
    • 線程和運行循環(Run Loops
    • 端口和Socket通訊

   核心基礎框架(Core Fundation)與基礎框架( Fundation) 緊密相關,爲相同的基本功能提供了Objective-C接口。

  若是開發者混合使用Foundation Objects 和Core Foundation類型,可充分利用兩個框架中的「toll-free bridging」。toll-free bridging意味着開發者能靈活使用這兩個框架中的類型。

  每一個框架中的類和數據類型的描述註明該對象是否支持toll-free bridged。若是是,說明它與哪一個對象橋接。

   (3)Core Service層框架-CFNetwork框架

  •  CFNetwork框架:是一組C語言接口集,提供網絡協議面向對象的抽象。開發者可使用 CFNetwork框架操做協議棧,而且能夠訪問低層的結構(如BSD Sockets:不只支持各類不一樣的網絡類型,並且也是一種內部進程之間的通訊機制)。同時,開發者也能簡化與FTP和HTTP服務器的通訊,或解析DNS
  • 使用CFNetwork框架可實現以下任務:
    • BSD Sockets
    • 利用SSL或TLS建立加密鏈接
    • 解析DNS Hosts
    • 解析HTTP協議,鑑別HTTP和HTTPS服務器
    • 在FTP服務器工做
    • 發佈、解析和瀏覽Bonjour(零配置聯網)服務

   (4)Core Service層框架-核心位置框架

  •  核心位置框架(Core Location Framework)主要得到手機設備當前的經緯度。
  • 核心位置框架利用附近的GPS、蜂窩基站或Wi-Fi信號信息測量用戶的當前位置。
  • iPhone地圖應用使用這個功能在地圖上顯示用戶當前位置。開發者能融合該技術到特定應用中,給用戶提供位置信息服務。

   (5)Core Service層框架-安全框架

  • IOS除內置安全特性外,還提供外部安全框架,確保應用數據安全性。該框架提供了管理證書、公鑰/私鑰對和信任策略等的接口。支持產生加密安全的僞隨機數,也支持保存在密鑰鏈的證書和密鑰。
  • CommonCrypto接口也支持對稱加密、HMAC(哈希消息認證碼)和數據摘要。在IOS裏沒有OpenSSL庫,可是數據摘要提供的功能在本質上與OpenSSL庫提供的功能一致。

   (6)Core Service層框架-數據庫框架SQLite

  • iPhone應用中能夠嵌入一個小型SQL數據庫SQLite,而不須要在遠端運行另外一個數據庫服務器。開發者能夠建立本地數據庫文件,並管理這些文件中 的表格和記錄。

   (7)Core Service層框架-XML支持框架

  • 基礎框架提供NSXMLParser類,解析XML文檔元素。
  • libXML2庫提供操做XML內容的功能,能夠快速解析和編輯 XML數據,並可將XML內容轉換爲HTML。

   11.Core OS層

   

  • Core OS層包含操做系統的內核環境、驅動和基本接口。內核基於Mac操做系統,負責操做系統的各個方面。它管理虛擬內存系統、線程、文件系統、網絡和內部通訊。
  • Core OS層的驅動也提供了硬件和系統框架之間的接口。基於安全方面的考慮,只有有限的系統框架類能訪問內核和驅動。
  • IOS提供了許多訪問操做系統低層功能的接口集,iPhone 應用經過LibSystem庫訪問這些功能,這些接口集以下所示:
    • 線程(POSIX線程)
    • 網絡(BSD sockets)
    • 文件系統訪問
    • 標準I/O
    • Bonjour(零配置聯網)和DNS服務
    • 區域語言相關信息(Locale Information
    • 內存分配
    • 數學計算

   3、IOS應用程序的基本結構

   1.IOS  APP生命週期流程圖

   

  

  • applicationDidFinishLaunching是應用程序對象實例化後,程序首先被觸發的方法。
  • applicationWillResignActive:當應用程序將要進入非活動狀態執行,此期間應用程序不接收消息或事件,好比來電話、鎖屏等。
  • applicationDidBecomeActive: 當應用程序進入活動狀態執行。
  • applicationDidEnterBackground:當程序被推送到後臺時調用,要設置後臺繼續運行,在這個函數裏設置便可。
  • applicationWillEnterForeground:當程序從後臺將要從新回到前臺時調用。
  • applicationWillTerminate:當程序將要退出時被調用,一般用來保存數據並作一些退出前的清理工做。

   2.IOS程序的狀態

  •  IOS中程序分五個狀態:活躍不活躍(鎖屏,程序不接受事件),運行結束後臺運行掛起(或凍結)
    • 後臺運行:是指不在界面中顯示,可是代碼還在執行
    • 掛起:程序在內存中,可是代碼不執行
  • IOS中除部分系統級應用(如音樂、郵件、Safari等)可實現「真後臺」外,大部分第三方應用在運行後按Home鍵回到首頁,雖然可以在雙擊Home鍵呼出的多任務列表中看到該應用,但此應用實際已處於凍結狀態。

   3.視圖控制器

  •  視圖控制器是控制應用程序如何運行的核心。
  • 一般在視圖控制器中實現應用程序如何響應選擇。
  • 若以前沒有使用Interface Builder建立預約義視圖,能夠在視圖控制器中加載和佈局視圖。
  • main.m 和應用程序委託(AppDelegate.m)一般較小,但視圖控制器(ViewController)源代碼一般較大,定義了應用程序訪問資源和對用戶作出響應的全部方式。

   4.UIViewController 的生命週期方法

  •  viewDidLoadAPP載入時會先經過調用loadView方法或者載入IB中建立的初始界面的方法,將視圖載入到內存中。而後調用該方法進行進一步的設置。一般,對於各類初始數據載入,初始設定等內容,都會在這個方法中實現。
  • viewDidUnload系統退出或收到內存警告時調用該方法,將不須要在內存中保留的對象釋 放,將其指針置爲nil。
  • viewWillAppear:對即將顯示的視圖作進一步的設置,在調入視圖時,可對數據作更新。
  • viewDidAppear:對正在顯示的視圖進行進一步的設置。
  • viewWillDisappear:視圖變換時,當前視圖即將被移除、或者被覆蓋時,調用該方法進行一些善後的處理和設置。
  • viewDidDisappear:可重寫這個方法,對已經消失,或者被覆蓋,或者已經隱藏了的視圖作一些其餘操做。

   5.視圖控制器的關鍵方法

  •  laodViewviewDidLoad方法:假設不是用XIB文件對視圖佈局,loadView方法必須設置屏幕,並對全部子視圖佈局。繼承一個具體類(如UITableViewcontroller)時,務必調用[super loadView] 或實現viewLoad,使父類可對屏幕進行適當設置。
  • shouldAutorotateToInterfaceOrientation方法:自動使屏幕與iPhone的方向匹配,還必須定義屏幕元素應該如何更新。
  • viewWillAppearviewDidAppear方法:當視圖準備在屏幕上顯示或者視圖已在屏幕上徹底顯示時調用這兩個方法。
    • 第一個方法準備要顯示的視圖信息,調用時視圖可能還未加載,若是依賴於訪問鏈接到子視圖的IBOutlets,要調用self.view以確保視圖層次被加載。
    • 第二個方法用來觸發視圖徹底顯示在屏幕上以後的行爲,例如動畫。

   6.沙盒機制

  • IOS沙盒是一個基於TrustBSD策略框架的內核擴展模塊訪問控制系統,針對每一個進程都可制定沙盒配置文件對其行爲進行控制。沙盒機制使得程序行爲獲得了控制,強制隔離了應用程序,並保護了應用程序數據和底層操做系統數據不被惡意修改。
  • IOS應用程序能夠在本身的沙盒中運行,可是不能訪問除此以外的任何沙盒。
  • IOS應用不能共享數據(除了經過用戶控制的系統粘貼板)。
  • 文件必須位於沙盒提供的文件夾中,而且不能將文件複製到其餘應用程序的文件夾中,或從其餘應用程序文件夾中複製文件。
  • 任何讀寫沙盒以外的嘗試都將被AppStore拒絕,IOS禁止應用程序將內容寫到沙盒外的文件夾中。
  • IOS應用程序擁有本身的LibraryDocumenttmp文件夾。

  4、IOS  UITouch 及觸摸事件

  1.IOS的觸摸事件

  • 觸摸事件是IOS中發生最多的事件。
  • 觸摸事件是當用戶手指觸擊屏幕及在屏幕上移動時,系統不斷髮送給應用程序的對象。
  • 系統將觸摸事件按照特定路徑傳遞給可對其進行處理的對象。
  • 在IOS中,一個UITouch對象表示一個觸摸,一個UIEvent對象表示一個事件。事件對象中包含與當前多點觸摸序列相對應的全部觸摸對象,還能夠提供與特定視圖或窗口相關聯的觸摸對象。

  

  • 觸摸信息包括時間和空間兩方面的信息
    • 時間方面的信息稱爲階段(phase),表示觸摸剛剛開始、正在移動、處於靜止狀態,手指從屏幕擡起
    • 空間觸摸信息包括當前觸摸位置在視圖或窗口中的位置信息,以及以前的位置信息。當一個手指接觸屏幕時,觸摸就和某個窗口或視圖關聯在一塊兒,這個關聯在事件的整個生命週期都會獲得維護。

   

  

  2.IOS的觸摸響應者對象

  •  響應者對象是能夠響應事件並對其進行處理的對象。
  • UIResponder是全部響應者對象的基類,它不只爲事件處理,並且也爲常見的響應者行爲定義了編程接口。
  • UIApplicationUIView、和全部從UIView派生出來的UIKit類(包括UIWindow)都直接或間接地繼承自UIResponder類。
  • 第一響應者是應用程序中當前負責接收觸摸事件的響應者對象(一般是一個UIView對象)。UIWindow對象以消息形式將事件發送給第一響應者,使其有機會首先處理事件。若是第一響應者沒有進行處理,系統就將事件(經過消息)傳遞給響應者鏈中的後繼響應者。

   3.IOS的觸摸事件處理

  •  爲了處理給定事件,響應者對象經常從傳入的集合參數中取得一或多個UITouch 對象,而後考察這些對象的屬性或取得它們的位置(若是須要處理全部觸摸對象,能夠向該NSSet 對象發送anyObject 消息)。
  • UITouch 類中的locationInView方法,若是傳入self 參數值,會給出觸摸動做在響應者座標系統中的位置(假定該響應者是UIView對象,且傳入的視圖參數不爲nil)。另外一個與之平行的方法previousLocationInView ,可給出觸摸動做以前的位置。
  • UITouch實例的屬性還能夠給出發生多少次觸碰(tapCount)、觸摸對象建立或最後一次變化發生的時間(timestamp)、以及觸摸所處的階段(phase)。

   4.IOS觸摸事件的響應者鏈

   響應者鏈是一個響應者對象鏈接序列,事件或動做消息依次傳遞。它容許響應者對象把事件處理的職責轉交給其它更高層的對象。應用程序經過向上傳遞一個事件來查找合適的處理對象。應用程序在處理觸摸事件時也能夠利用響應者鏈。響應者鏈由一系列的下一個響應者組成。

   

  • Step1:第一響應者傳遞事件或動做消息給它的視圖控制器(若是有的話);若是沒有視圖控制器,就傳遞給其父視圖。
  • Step2:若是視圖或者其視圖控制器不能處理該事件或動做消息,將傳遞給該視圖的父視圖。
  • Step3:在視圖層次中的每一個後續父視圖均遵循Step2模式。
  • Step4:最頂層視圖如不能處理該事件或動做消息,就傳遞給UIWindow對象來處理。
  • Step5:UIWindow對象不能處理,傳給UIApplication對象。
  • Step6:UIApplication也不能處理該事件或動做消息,將拋棄它。

第四部分:WinCE操做系統

   1.系統簡介

   WinCE不只僅只是一個操做系統,還包括對多種目標處理器以及外圍設備的支持並提供了系統開發工具、應用開發工具、整合的應用程序(如IE),以及NET Frameworks,全部這些組件構成了WinCE系統的應用框架

  在操做系統的基礎上:

  • 提供了方便的開發工具開發BSP,使得基本的WinCE操做系統Kernel能夠迅速被移植到某個專用嵌入式系統的硬件平臺上。
  • 提供便捷的應用軟件開發平臺,以及應用程序在多種Windows平臺間的快速移植能力。
  • 操做系統以及所支持的特性能夠根據嵌入式應用程序的須要,進行配置管理,使開發者能夠根據需求來選擇特性進行組合,構建出新系統。

   2.基礎組件

  • 一、應用程序設計界面組件:包括MFC、ATL和.NET Framework架構。
  • 二、網絡通訊組件:包括服務層、接口層、協議層和驅動層。服務層提供網絡服務,接口層是系統的標準應用接口,協議層包括各類協議堆棧,驅動層是實體設備的支持基礎。
  • 三、數據存儲組件:包括RAM存儲、ROM存儲以及用於支持ATA設備和SRAM卡等周邊儲存設備的存儲,與我的計算機不一樣。
  • 四、圖形接口組件:整合win32 API、使用者接口和GDI,構建了GWES模塊。
  • 五、多語言和國際化支持組件:提供大量字符碼支持。
  • 六、安全組件:構建安全的網絡通訊、安全數據存儲、標準加密體系和認證機制等。
  • 七、應用整合組件:包括瀏覽器、Office組件、Media組件和遠程桌面客戶等。

   3.系統模塊與架構

   

  4.系統模塊

  • 一、NK:WinCE系統的真正核心。
  • 二、CoreDLL:分離了應用程序和操做系統,是應用程序系統功能的代理。
  • 三、設備管理模塊:提供設備列表管理、即插即用管理、電源管理、IO資源管理等功能。
  • 四、數據儲存模塊:提供系統基本的數據儲存能力。
  • 五、圖形接口模塊:提供繪圖引擎、窗口管理、接口事件機制等。
  • 六、通訊模塊:提供網絡通訊支持。
  • 七、OAL模塊:包括硬件相關的若干功能,如總線控制器驅動、系統引導程序和初始化程序等。
  • 八、驅動程序模塊:是由驅動程序實體構成的集合。
  • 九、Win32系統服務模塊。

 第五部分、典型的移動終端

   

相關文章
相關標籤/搜索