1. 程式人生 > >Android基礎知識(可能對面試有幫助)

Android基礎知識(可能對面試有幫助)

1、Android的四大元件
  1. Activity:提到Activity就要想到它的生命週期,一般一個活動啟動的順序是onCreate()➝onStart()➝onResume();當另外一個活動如B啟動的時候,活動A就onPause(),而活動B就onCreate()➝onStart()➝onResume();當返回第一個活動A的時候,活動B就會onPause(),活動A就會onRestart()➝onStart()➝onResume();活動B就onPause()➝onStop()➝onDestory();                         一個Activity的銷燬順序是:onPause()➝onStop()➝onDestory()                                                                                             一般我們這樣理解:onCreate()
    :當一個活動啟動的時候,需要準備的活動,如佈局載入等,就在onCreate()完成;onStrat():當活動即將要跟使用者互動的時候被呼叫。onResume():當活動和使用者進行互動的時候,就被呼叫了。onPause():當活動被迫從前臺轉到後臺的時候會被呼叫,一般會在這時候儲存狀態資訊。onStop():當活動不在需要被呼叫的時候,就會呼叫onStop();onRestart():當活動需要再次被呼叫到前臺的時候,就會被呼叫;onDestory():當活動被銷燬的時候,就會被呼叫。
  2. Server服務:可以用在許多地方,比如播放多媒體時啟動另外一個活動,多媒體還要後臺繼續播放;又比如後臺記錄你的位置發生變化。要提到的是,使用Service,需要在配置檔案裡宣告,才可以使用startservice()和bindservice();
  3. Broadcast Receiver廣播接收器:(例子:手機來信有廣播通知,電量不足有廣播)分為兩種,一、標準廣播,完全非同步執行,特點是:廣播播出後,所有廣播接收器都可以接收,因為他們之間沒有順序,缺點是無法截斷。二、有序廣播,特點是:廣播播出後,同一時刻只有一個廣播器能接收,當該廣播器處理完後,才會繼續傳遞,可以選擇截斷,不讓下面接收,優先順序高的先接收。                                                                                                                                                       廣播接收器可以自由地對自己感興趣的廣播進行註冊,當有相應的廣播發出後,就會接收。他有兩種註冊方式。一、動態註冊
    ,即在程式碼裡註冊。建立一個類,讓它繼承BroadcastReceiver並重寫onReceive()方法;二、靜態註冊,即在配置檔案裡宣告一個許可權
  4. Content Provider內容提供者:即對外共享資料,把應用中的資料提供給其他應用,如聯絡人,圖片等資料
2、Android的事件處理機制      理解Android的事件處理機制對處理一些複雜的巢狀時很有用,比如scrollview裡巢狀listview,或者scrollview裡巢狀viewpaper這些都會容易產生事件衝突。這裡主要講的就是Touch事件,主要有三個方法:dispatchTouchEvent(MotionEvent ev)—Activity,ViewGroup,View都有此方法【即將事件進行分發到目標控制元件】、onInterceptTouchEvent(MotionEvent ev)—ViewGroup 【用來過濾事件,進行事件攔截,是否要向下傳遞事件】、onTouchEvent(MotionEvent  ev)—Activity,ViewGroup,view【最終用來處理事件】一般系統預設幫我們呼叫了前面兩種方法,我們平時都是重寫onTouchEvent      android系統對本事件的處理是一層一層向下傳遞處理(樹形處理),它是一顆UI佈局樹,最外層佈局是整個UI樹的根。      圖片配合講解       講解:當我們用手機按下螢幕的時候,當前處於onStart()狀態的Activity最先收到此Touch事件下的ACTION_DOWN,然後開始呼叫dispatchTouchEvent()開始進行事件的分發,如果返回true,則Activity不向下分發事件,則整個佈局都不會收到DOWN事件,TouchEvent直接到onTouchEvent()事件處理;若返回false,則DOWN事件繼續向下分發,此時DOWN事件直接被分發到UI樹的根佈局(最外層的佈局),根佈局拿到DOWN事件後,執行自己的dispatchTouchEvent(),如果返回true,則直接交給根佈局的onTouchEvent()中進行;若返回false,表示還要繼續下發,此時事件被傳遞到根佈局的onInterceptTouchEvent(),如果返回true,表示要對事件進行過濾,則DOWN事件又直接進行到根佈局的onTouchEvent()方法中;若返回false,要根佈局不對事件進行過濾處理,繼續向下傳遞,直到達到目標元件後,目標元件呼叫自己的dispatchTouchEvent()方法,由於是目標元件,直接分到自己的onTouchEvent(),目標元件如果處理完返回true,表示該事件被消費完畢,不再向上傳遞,如果返回false,則表示沒有消費完,需要傳到父元件,父元件在進行DOWN事件的處理,一直向上傳遞到事件被扔到虛擬機器。 3、Android的系統架構
  1. Linux核心層:Android是基於Linux核心的,該層為安卓的硬體提供了底層的驅動,如顯示驅動,藍芽驅動。
  2. 系統執行庫:該層通過一些c/c++庫來為Android系統提供一些主要的特性支援,如SQLite庫提供資料庫的支援,Webkit提供瀏覽器核心的支援。同樣這一層還有系統執行庫,它提供了一些核心庫,能夠使開發者使用java語言來編寫Android應用。該庫還提供了Dalvik虛擬機器,使得每一android應用程式能夠獨立執行
  3. 應用框架層:提供構建應用程式時要用到的API
  4. 應用層:手機安裝的應用程式都在這一層
4、啟動活動的方式      說到活動的啟動,就要提到堆疊和task,什麼是task,它是一個具有棧結構的容器。當我們啟動一個應用時候,系統就會為之建立一個task,來放置根Activity,預設情況下,同一個應用的Activity都是放在同一個task,當你啟動另外一個應用的時候,就會新建一個task,而之前的task會被轉到後臺。      Activity的LaunchMode屬性可以指定Activity和Task之間的關係。
  1. standard:系統預設的載入方式,在同一個task裡可以反覆例項同一個Activity,比如在棧A,B,C,D裡,當用intent啟動D時,會例項一個新的D-Activity,放進task裡,即A,B,C,D,D;如果此時按返回鍵的話,就會依次彈出D,D,C,B,A。
  2. singleTop:用一句話來概述就是,同一個Activity可以被多次例項,但是不允許兩個相同的Activity相鄰。比如在棧A,B,C,D裡,當要啟動D時,是不會新建一個D的,即還是A,B,C,D;但是如果要啟動一個B時,就會新建一個B,即A,B,C,D,B;
  3. singleTask:在這個task裡,不會出現兩個相同的Activity,會把要跳轉的Activity上面所有的Activity彈出。比如在棧A,B,C,D裡,要啟動B的話,就把C,D彈出,即task裡只剩A,B;
  4. singleInstance:為有定義的singleInstance的Activity,新建一個task來放。比如說D的啟動模式是singleInstance,同時棧裡有A,B,C,如果要跳轉D,則會新建個task2,並把D放在task2。
5、Android如何做資料儲存
  1. SharePreferences:是用來儲存一些簡單的資訊,如使用者的密碼,賬號。使用Map的資料結構來儲存資料,以鍵值對的方式儲存,採用了XML的格式將資料儲存到裝置中。(只能在同一個應用中共享資料)
          使用:SharePreferences是讀取資料,但要修改,新增資料,則要利用edit()方法來獲取Editor物件然後                                  commit()提交。           儲存在:/data/data<package name>/shares_prefs資料夾下
  1. 檔案儲存方式:使用了Java的IO操作來進行檔案的儲存和讀取,只不過Android的Context類中封裝好了輸入和輸出流的方法。可以如圖片,音訊等
          使用:一、儲存檔案:openFileOutput獲取輸出流,引數為檔名和儲存模式。二、讀取檔案:openFileInput獲取輸                入流,引數為檔名。           儲存在:/data/data<package name>/file
  1.  SQLite:是一個輕量型的關係型資料庫,操作語句與mysql,sqlserver有類似。
  2. ContentProvider:可以提供一個數據如:系統的音訊,視訊,圖片,私人通訊錄等,當然要獲得許可權。除此之外,一個應用程式想訪問另外一個程式資料也可以使用ContentProvider。
          使用:當外部需要對Content’Provider中的資料進行新增,刪除,查詢等,則要使用ContentResolver