<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • 淺談android組件間的值傳遞

    [來源] 達內    [編輯] 達內   [時間]2012-09-18

    以前,沒怎么認真思考過android的組件間的傳值,都是秉承著,設置用shared來存,緩存用文件來存,復雜數據用sqlite,簡單的數據之間設置intent,最近,做的一個項目讓我認真的思考了一下,我們該如何更方便的處理我們的數據?

    淺談android組件間的值傳遞

    • 導言
    • 5種類型的的簡要示例
    • 討論

    導言

    以前,沒怎么認真思考過android的組件間的傳值,都是秉承著,設置用shared來存,緩存用文件來存,復雜數據用sqlite,簡單的數據之間設置intent,最近,做的一個項目讓我認真的思考了一下,我們該如何更方便的處理我們的數據?

    5種類型的的簡要示例

    假設有這么一個流程

    A組件 把值傳遞給 B組件

    內存

    1. A -> parcel/serializable <- B

      A 利用android的序列化機制,傳遞值的狀態,使B能夠通過KEY 獲取到A 改變的值.

    2. A -> Application <- B

      A 利用Application定義的全局變量,進行值的修改,B通過變量訪問Application的值.

    文件

    1. A -> sharedpreference <- B

      A 在sharedprefernce 里面更改值,B通過KEY值獲取A改變的值

    2. A -> File <- B

      A 把值寫進文件里面,B通過文件名獲取A的值

    3. A -> SQlite <- B

      A 通過數據庫的操作把值存進去,B同樣通過數據庫操作獲得

    討論

    對于這5種類型,我以存儲的介質,簡單做了一個分類,那我們應該怎么對組件間的傳值進行一個最優選擇呢?

    還記得,我們最開始學習android的時候,老師都是這么教的

    `Intent intent = new Intent().setClass(xxxx)

    context.startxxxx `

    之后我們的目標類就可以通過獲得intent這個包,接著用相應的key獲取到相應的值.

    現在,我們來思考一下這種傳值模式.這個模型是一個傳遞模型,即是一個一對一的傳遞,如果,我們的關系只有A 組件 到 B 組件,然后B組件到C 組件的話,值的的存在狀態只有A 到B,然后B 到 C 傳的值是一個全新的狀態的話,這種傳值模式是非常的簡便而且高效.

    但是,這種模式不利于處理值的狀態傳遞.如果,有這么一個需要,C要讀取A發出的值,A的值需要通過B進行處理發給C

    A -> B -> C

    看上去一點問題都沒,但是,通過B 處理的值,C只能接受一次,因為,B傳遞給C值是一個全新的值,并不是真正的有A那里獲取,所以下次要從A獲取同樣的值,就又要處理一遍,我們可以想象,能夠組件關系多了的話這個處理就有多復雜了.這里,我們就會思考,找個地方把值存起來吧.

    值的存儲形式

    對于android的值的保存,我們可以有如下選擇

    • Application
    • Sharedpreference
    • File
    • SQlite

    那么,接下來,我們思考的就是應該以文件的方式存,還是直接把值存到應用的整個周期里面.

    值的生命周期

    然后,我們需要思考的是我們的值需要存儲多久?

    • Application 整個應用程序的存在
    • Sharedpreference 一直存在,直到清除
    • File 一直存在,直到清除
    • SQlite 一直存在,直到清除

    值的操作

    確定了值的存儲的周期以后,我們接下來要考慮的就是對于操作

    • Application 通過靜態變量
    • Sharedpreference 通過系統的shared框架,用key-value進行值的CURD
    • File 通過文件名
    • SQlite 通過數據庫操作

    資源下載

    ?