Android 簡單各種機制集合(面)(待補充)
ORM(Object-Relational-Mapping)物件關係對映
是一種程式技術,用於實現面對物件不同型別系統之間的轉換,其實是建立一個程式語言裡面使用的“虛擬物件資料庫”。
IPC(Inter-Process-Communication)程序間通訊
代表了一款處理器的設計架構,一旦該處理器設計完成之後,IPC值就不會再改變了。
HTTP是什麼?
(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的連線方式
HTTPS是什麼?
HTTPS是安全版的http,https能保證電子商務的教育安全;
HTTP與HTTPS的區別是什麼?
http與https最大區別在於https多加一個保障通訊安全的層。
《HTTP》————《TCP》————《IP》
《HTTP》————《SSL/TLS》————《TCP》————《IP》
SSL/TLS(Secare-Socket-Layer)加密處理器
是一種在客戶端跟伺服器端一個加密的安全標準一般用來加密網路伺服器跟,瀏覽器,或者郵箱伺服器跟郵件客戶端(如OutLook)之間傳輸的資料。
堆與棧
堆:佇列優先,先進先出(FIFO—first in first out);
棧:先進後出(FILO—First-In/Last-Out)。
在計算機領域,堆疊是一個不容忽視的概念,堆疊是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端(稱為棧頂(top))對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和地址,通常用來保護斷點和現場。
堆疊空間分配
棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。
效率比較
棧由系統自動分配,速度較快。但程式設計師是無法控制的。
堆是由new 分配的記憶體,一般速度比較慢,而且容易產生記憶體碎片,不過用起來最方便。
Fragment生命週期
與Activity生命週期的對比
場景演示 : 切換到該Fragment
11-29 14:26:35.095: D/AppListFragment(7649): onAttach
11-29 14:26:35.095: D/AppListFragment(7649): onCreate
11-29 14:26:35.095: D/AppListFragment(7649): onCreateView
11-29 14:26:35.100: D/AppListFragment(7649): onActivityCreated
11-29 14:26:35.120: D/AppListFragment(7649): onStart
11-29 14:26:35.120: D/AppListFragment(7649): onResume
螢幕滅掉:
11-29 14:27:35.185: D/AppListFragment(7649): onPause
11-29 14:27:35.205: D/AppListFragment(7649): onSaveInstanceState
11-29 14:27:35.205: D/AppListFragment(7649): onStop
螢幕解鎖
11-29 14:33:13.240: D/AppListFragment(7649): onStart
11-29 14:33:13.275: D/AppListFragment(7649): onResume
切換到其他Fragment:
11-29 14:33:33.655: D/AppListFragment(7649): onPause
11-29 14:33:33.655: D/AppListFragment(7649): onStop
11-29 14:33:33.660: D/AppListFragment(7649): onDestroyView
切換回本身的Fragment:
11-29 14:33:55.820: D/AppListFragment(7649): onCreateView
11-29 14:33:55.825: D/AppListFragment(7649): onActivityCreated
11-29 14:33:55.825: D/AppListFragment(7649): onStart
11-29 14:33:55.825: D/AppListFragment(7649): onResume
回到桌面
11-29 14:34:26.590: D/AppListFragment(7649): onPause
11-29 14:34:26.880: D/AppListFragment(7649): onSaveInstanceState
11-29 14:34:26.880: D/AppListFragment(7649): onStop
回到應用
11-29 14:36:51.940: D/AppListFragment(7649): onStart
11-29 14:36:51.940: D/AppListFragment(7649): onResume
退出應用
11-29 14:37:03.020: D/AppListFragment(7649): onPause
11-29 14:37:03.155: D/AppListFragment(7649): onStop
11-29 14:37:03.155: D/AppListFragment(7649): onDestroyView
11-29 14:37:03.165: D/AppListFragment(7649): onDestroy
11-29 14:37:03.165: D/AppListFragment(7649): onDetach
比Activity多了一些生命週期,完整和Activity對接上,大家好好利用。
view生命週期
View是什麼?官方原始碼註釋中的定義:這個類是使用者介面的基礎構件。View表示螢幕上的一塊矩形區域,負責繪製這個區域和事件處理。
View是所有widget類的基類,Widget類用於建立互動式UI構件(按鈕,輸入框等)。
View類的ViewGroup子類是layout的基類,Layout是一個不可見的容器,它儲存著View(或ViewGroup)並定義這些View的layout 屬性。
簡單點說,View就是螢幕上的一塊矩形區域,我們可以在這塊區域繪製我們想讓使用者看到的圖形。
關於View的生命週期,官方原始碼註釋中有詳細的描述,作為英語六級勉強飄過的選手,我頂著巨大的壓力翻譯了一下。
Creation(建立)
Constructors(建構函式):有一種形式的建構函式會在View在程式碼中被建立時呼叫,另一種形式的建構函式會在View從layout加載出來時被呼叫。
第二種形式的建構函式會解析和應用layout檔案中定義的任何屬性。
onFinishInflate():該方法當View及其子View從XML檔案中載入完成後會被呼叫。
Layout(佈局)
onMeasure(int, int):該方法在計算當前View及其所有子View尺寸大小需求時會被呼叫。
onLayout(boolean, int, int, int, int):該方法在當前View需要為其子View分配尺寸和位置時會被呼叫。
onSizeChanged(int, int, int, int):該方法在當前View尺寸變化時被呼叫。
Drawing(繪製)
onDraw(android.graphics.Canvas):該方法在當前View需要呈現其內容時被呼叫。
Event processing(事件處理)
onKeyDown(int, KeyEvent):該方法在一個物理按鍵事件發生時被呼叫。
onKeyUp(int, KeyEvent):該方法在一個物理按鍵彈起事件發生時被呼叫。
onTrackballEvent(MotionEvent):該方法在一個軌跡球運動事件發生時被呼叫。
onTouchEvent(MotionEvent):該方法在一個觸控式螢幕幕運動事件發生時被呼叫。
Focus(聚焦)
onFocusChanged(boolean, int, android.graphics.Rect):該方法在當前View獲得或失去焦點時被呼叫。
onWindowFocusChanged(boolean):該方法在包含當前View的window獲得或失去焦點時被呼叫。
Attaching(附上)
onAttachedToWindow():該方法在當前View被附到一個window上時被呼叫。
onDetachedFromWindow():該方法在當前View從一個window上分離時被呼叫。
onVisibilityChanged(View, int):該方法在當前View或其祖先的可見性改變時被呼叫。
onWindowVisibilityChanged(int):該方法在包含當前View的window可見性改變時被呼叫。
上述方法是View生命週期中涉及到的比較重要的一部分,View類中包含了很多的方法和屬性,有興趣的話各位可以自己研究一下。
IJKplay
ijkplayer是一個基於FFmpeg的輕量級Android/iOS視訊播放器。FFmpeg的是全球領先的多媒體框架,能夠解碼,編碼, 轉碼,複用,解複用,流,過濾器和播放大部分的視訊格式。它提供了錄製、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音訊/視訊編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec裡很多code都是從頭開發的。
NDK
Native Development Kit(NDK)是一系列工具的集合。它提供了一系列的工具,幫助開發者快速開發C/C++的動態庫,並能自動將so和java一起打包成apk。
JNI
Java Native Interface(JNI)標準是java平臺的一部分,JNI是Java語言提供的Java和C/C++相互溝通的機制,Java可以通過JNI呼叫C/C++程式碼,C/C++的程式碼也可以呼叫java程式碼。
JDK(Java開發工具包)
JDK(Java Development Kit) 是 Java 語言的軟體開發工具包(SDK)。在JDK的安裝目錄下有一個jre目錄,裡面有兩個資料夾bin和lib,在這裡可以認為bin裡的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib合起來就稱為jre。
JVM(Java虛擬機器)
JVM是Java Virtual Machine(Java虛擬機器)的縮寫,JVM是一種用於計算裝置的規範,它是一個虛構出來的計算機,是通過在實際的計算機上模擬模擬各種計算機功能來實現的。
JRE(Java執行環境)
JRE(Java Runtime Environment,Java執行環境),包含JVM標準實現及Java核心類庫。JRE是Java執行環境,並不是一個開發環境,所以沒有包含任何開發工具(如編譯器和偵錯程式)
SDK
SDK:(software development kit)軟體開發工具包。被軟體開發工程師用於為特定的軟體包、軟體框架、硬體平臺、作業系統等建立應用軟體的開發工具的集合。
ANR
ANR全名Application Not Responding, 也就是”應用無響應”. 當操作在一段時間內系統無法處理時, 系統層面會彈出上圖那樣的ANR對話方塊.
1.2 為什麼會產生ANR
在Android裡, App的響應能力是由Activity Manager和Window Manager系統服務來監控的. 通常在如下兩種情況下會彈出ANR對話方塊:
•5s內無法響應使用者輸入事件(例如鍵盤輸入, 觸控式螢幕幕等).
•BroadcastReceiver在10s內無法結束.
造成以上兩種情況的首要原因就是在主執行緒(UI執行緒)裡面做了太多的阻塞耗時操作, 例如檔案讀寫, 資料庫讀寫, 網路查詢等等.
1.3 如何避免ANR
知道了ANR產生的原因, 那麼想要避免ANR, 也就很簡單了, 就一條規則:
不要在主執行緒(UI執行緒)裡面做繁重的操作.
這裡面實際上涉及到兩個問題:
1.哪些地方是執行在主執行緒的?
2.不在主執行緒做, 在哪兒做?
ORM
物件關係對映(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向物件與關係資料庫存在的互不匹配的現象的技術。簡單的說,ORM是通過使用描述物件和資料庫之間對映的元資料,將程式中的物件自動持久化到關係資料庫中。那麼,到底如何實現持久化呢?一種簡單的方案是採用硬編碼方式,為每一種可能的資料庫訪問操作提供單獨的方法。
簡單:以最基本的形式建模資料。
· 傳達性:資料庫結構被任何人都能理解的語言文件化。
· 精確性:基於資料模型建立正確標準化了的結構。
RxJava
非同步操作很關鍵的一點是程式的簡潔性,因為在排程過程比較複雜的情況下,非同步程式碼經常會既難寫也難被讀懂。 Android 創造的 AsyncTask 和Handler ,其實都是為了讓非同步程式碼更加簡潔。RxJava 的優勢也是簡潔,但它的簡潔的與眾不同之處在於,隨著程式邏輯變得越來越複雜,它依然能夠保持簡潔。
AsyncTask
doInbackGround+onPostExecute
doInBackground() 這個方法執行在後臺執行緒中,主要負責執行那些很耗時的操作,如訪問網路。該方法必須重寫。
onPostExecute(Result) 這個方法運行於UI主執行緒,在doInBackground(Params…)方法執行後呼叫,該方法用於接收後臺任務執行後返回的結果,重新整理UI顯示。