重要性依次是:前臺進程,可見進程,服務進程,後臺進程和空進程;因此銷燬的順序是逆方向。html
前臺進程(foreground): 目前正在屏幕上顯示的進程和一些系統進程。舉例來講,Dialer Storage,Google Search等系統進程就是前臺進程;再舉例來講,當你運行一個程序,如瀏覽器,當瀏覽器界面在前臺顯示時,瀏覽器屬於前臺進程(foreground),但一旦你按home回到主界面,瀏覽器就變成了後臺程序(background)。 咱們最不但願終止的進程就是前臺進程。java
可見進程(visible): 可見進程是一些不在前臺,但用戶依然可見的進程,舉個例來講:widget、輸入法等,都屬於visible。這部分進程雖然不在前臺,但與咱們的使用也密切相關,咱們也不但願它們被終止(你確定不但願時鐘、天氣,新聞等widget被終止,那它們將沒法同步,你也不但願輸入法被終止,不然你每次輸入時都須要從新啓動輸入法)android
次要服務(secondary server): 目前正在運行的一些服務(主要服務,如撥號等,是不可能被進程管理終止的,故這裏只談次要服務),舉例來講:谷歌企業套件,Gmail內部存儲,聯繫人內部存儲等。這部分服務雖然屬於次要服務,但很一些系統功能依然息息相關,咱們時常須要用到它們,因此也太但願他們被終止spring
後臺進程(hidden): 雖然用了hidden這個詞,但實際便是後臺進程(background),就是咱們一般意義上理解的啓動後被切換到後臺的進程,如瀏覽器,閱讀器等。當程序顯示在屏幕上時,他所運行的進程即爲前臺進程(foreground),一旦咱們按home返回主界面(注意是按home,不是按back),程序就駐留在後臺,成爲後臺進程(background)。後臺進程的管理策略有多種:有較爲積極的方式,一旦程序到達後臺當即終止,這種方式會提升程序的運行速度,但沒法加速程序的再次啓動;也有較消極的方式,儘量多的保留後臺程序,雖然可能會影響到單個程序的運行速度,但在再次啓動已啓動的程序時,速度會有所提高。這裏就須要用戶根據本身的使用習慣找到一個平衡點 內容供應節點(content provider): 沒有程序實體,僅僅提供內容供別的程序去用的,好比日曆供應節點,郵件供應節點等。在終止進程時,這類程序應該有較高的優先權 空進程(empty): 沒有任何東西在內運行的進程,有些程序,好比BTE,在程序退出後,依然會在進程中駐留一個空進程,這個進程裏沒有任何數據在運行,做用每每是提升該程序下次的啓動速度或者記錄程序的一些歷史信息。 這部分進程無疑是應該最早終止的。 補充: 系統會對進程的重要性進行評估,並將重要性以「oom_adj」這個數值表示出來,賦予各個進程;(系統會根據「oom_adj」來判斷須要結束哪些進程,通常來講,「oom_adj」的值越大,該進程被系統選中終止的可能就越高) 前臺程序的「oom_adj」值爲0,這意味着它不會被系統終止,一旦它不可訪問後,會得到個更高的「oom_adj」,推測「oom_adj」的值是根據軟件在LRU列表中的位置所決定的; Android不一樣於Linux,有一套本身獨特的進程管理模塊,這個模塊有更強的可定製性,可根據「oom_adj」值的範圍來決定進程管理策略,好比能夠設定「當內存小於X時,結束「oom_adj」大於Y的進程」。這給了進程管理腳本的編寫以更多的選擇。數據庫
前臺進程數組
用戶當前操做所必需的進程。若是一個進程知足如下任一條件,即視爲前臺進程:瀏覽器
一般,在任意給定時間前臺進程都爲數很少。只有在內存不足以支持它們同時繼續運行這一萬不得已的狀況下,系統纔會終止它們。 此時,設備每每已達到內存分頁狀態,所以須要終止一些前臺進程來確保用戶界面正常響應。緩存
可見進程安全
沒有任何前臺組件、但仍會影響用戶在屏幕上所見內容的進程。 若是一個進程知足如下任一條件,即視爲可見進程:服務器
可見進程被視爲是極其重要的進程,除非爲了維持全部前臺進程同時運行而必須終止,不然系統不會終止這些進程。
服務進程
正在運行已使用 startService() 方法啓動的服務且不屬於上述兩個更高類別進程的進程。儘管服務進程與用戶所見內容沒有直接關聯,可是它們一般在執行一些用戶關心的操做(例如,在後臺播放音樂或從網絡下載數據)。所以,除非內存不足以維持全部前臺進程和可見進程同時運行,不然系統會讓服務進程保持運行狀態。
後臺進程
包含目前對用戶不可見的 Activity 的進程(已調用 Activity 的 onStop() 方法)。這些進程對用戶體驗沒有直接影響,系統可能隨時終止它們,以回收內存供前臺進程、可見進程或服務進程使用。 一般會有不少後臺進程在運行,所以它們會保存在 LRU (最近最少使用)列表中,以確保包含用戶最近查看的 Activity 的進程最後一個被終止。若是某個 Activity 正確實現了生命週期方法,並保存了其當前狀態,則終止其進程不會對用戶體驗產生明顯影響,由於當用戶導航回該 Activity 時,Activity 會恢復其全部可見狀態。 有關保存和恢復狀態的信息,請參閱 Activity文檔。
空進程
不含任何活動應用組件的進程。保留這種進程的的惟一目的是用做緩存,以縮短下次在其中運行組件所需的啓動時間。 爲使整體系統資源在進程緩存和底層內核緩存之間保持平衡,系統每每會終止這些進程。
運行異常:編譯器直接拋出的異常
非檢查異常:必須用try catch來進行拋出的異常, 主要涉及IO相關,數據庫鏈接相關的異常;
運行異常包括:
Runtime Exception主要包括如下這些:
ArithmeticException, 算術異常
ArrayStoreException, 將數組類型不兼容的值賦值給數組元素時拋出的異常
BufferOverflowException, 緩衝區溢出異常
BufferUnderflowException, 緩衝區下溢異常
CannotRedoException, 不能重複上一次操做異常
CannotUndoException, 不能撤銷上一次操做異常
ClassCastException, 類型強制轉換異常
ClassNotFoundException 類沒找到時,拋出該異常
CMMException, CMM異常
ConcurrentModificationException, 對 Vector 、ArrayList在迭代的時候若是同時對其進行修改就會拋出異常 org.springframework.jdbc.CannotGetJdbcConnectionException 服務器端數據庫鏈接不上時,拋出該異常 CannotGetJdbcConnectionException 網絡沒有鏈接或網絡中斷
DOMException, DOM異常 EOFException, 文件已結束異常
EmptyStackException, 空棧異常
FileNotFoundException, 文件未找到異常
IllegalArgumentException, 傳遞非法參數異常
IllegalMonitorStateException, IllegalAccessException, 訪問某類被拒絕時拋出的異常
IllegalPathStateException, 非法的路徑聲明異常
IllegalStateException, 非法聲明異常
ImagingOpException, 成像操做異常
IndexOutOfBoundsException, 下標越界異常
IOException, 輸入輸出異常
NegativeArraySizeException, 數組負下標異常
NoSuchMethodException 在類中沒法找到某一特定方法時,拋出該異常
NoSuchElementException, 方法未找到異常
NoSuchFieldException 類不包含指定名稱的字段時產生的信號(bean中不存在這個屬性 ) NumberFormatException, 字符串轉換爲數字異常
NullPointerException, 空指針異常
ProfileDataException, 沒有日誌文件異常
ProviderException, 供應者異常
RasterFormatException, 平面格式異常
SecurityException, 違背安全原則異常
SQLException, 操做數據庫異常
SystemException, 系統異常
UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException, 不支持的操做異常
1.訪問其餘應用程序的Activity
2.Content Provider
3.廣播(Broadcast)
4.AIDL服務
Android的 動畫分爲3種,具體以下所示:
幀動畫:也就是咱們說的 Frame 動畫。 Frame 動畫是一系列圖片按照必定的順序展現的過程,和放電影的機制類似,它的原理是在必定的時間段內切換多張有細微差別的圖片從而達到動畫的效果。因爲是一幀一幀加載,因此須要較多的圖片。從而增大 APK 的大小,不過 Frame 動畫能夠實現一些比較難的效果,例如:等待的環形進度。 所涉及到的 Java 對象有: AnimationDrawable 。
補間動畫:也就是 Tween 動畫,是操做某一個控件讓其展示出旋轉、漸變、移動、縮放的一種轉換過程。是一種視覺上的變化,不是真正位置上的變化。只能運用在 View 對象上,而且功能相對來講較爲侷限。例如:旋轉動畫只可以在 x 、 y 軸進行,而不能在 z 軸放心進行旋轉。所以,補間動畫一般用於執行一些比較簡單的動畫。 所涉及到的 Java 對象有: AlphaAnimation (漸變更畫)、 ScaleAnimation (縮放動畫)、 TranslateAnimation (位移動畫)、 RotateAnimation (旋轉動畫)。
屬性動畫:是 Android 3.0 以後推出的,其機制再也不是針對 View 來設計的,也不限於只能實現移動、縮放、旋轉和淡入這幾種簡單的動畫操做,同時也再也不只是一種視覺上的動畫效果。屬性動畫其實是一種在必定時間段內不斷修改某個對象的某個屬性值的機制。 所涉及到的 Java 對象有: ValueAnimator 、 ObjectAnimator 。
繼承至SurfaceView,它內嵌的surface專門負責OpenGL渲染。
GLSurfaceView提供了下列特性:
1> 管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖view上。
2> 管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。
3> 用戶自定義渲染器(render)。
4> 讓渲染器在獨立的線程裏運做,和UI線程分離。
5> 支持按需渲染(on-demand)和連續渲染(continuous)。
6> 一些可選工具,如調試。
1) 基本類型的數據和基本類型的數組數據
2) String/CharSequence 類型的數據和 String/CharSequence 類型的數組數據
3) 傳遞 Parcelable (包裹化,郵包)和 Serializable (序列化)類型的數據,以及它們的數組/列表數據】
ps:file對象繼承於Serializable數據
標籤嵌套是resources>style>item
一、SharedPreferences
二、內部存儲(例如經過openFileOutput()打開一個文件輸入輸出流)
三、SQLite Database
四、網絡鏈接(將數據存儲到服務器上)
五、外部存儲(SD卡)
一、Serializable在序列化的時候會產生大量的臨時變量,從而引發頻繁的GC;
二、在使用內存的時候,Parcelable比Serializable性能高,因此推薦使用Parcelable。
三、Parcelable不能使用在要將數據存儲在磁盤上的狀況,由於Parcelable不能很好的保證數據的持續性在外界有變化的狀況下。儘管Serializable效率低點,但此時仍是建議使用Serializable 。
獲取屏幕密度 getScreen
獲取設備屏幕大小 getDisplay
得到屏幕的屬性,從而取得屏幕的高度和寬度 getMetrics
得到window對象 getWindows
短信相關權限
GLSurfaceView是一個視圖,繼承至SurfaceView,它內嵌的surface專門負責OpenGL渲染。
GLSurfaceView提供了下列特性:
1> 管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖view上。
2> 管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。
3> 用戶自定義渲染器(render)。
4> 讓渲染器在獨立的線程裏運做,和UI線程分離。
5> 支持按需渲染(on-demand)和連續渲染(continuous)。
6> 一些可選工具,如調試。
https://www.jianshu.com/p/0261e6cceb3e
一、單個RadioButton在選中後,經過點擊沒法變爲未選中
單個CheckBox在選中後,經過點擊能夠變爲未選中
二、一組RadioButton,只能同時選中一個
一組CheckBox,能同時選中多個
三、RadioButton在大部分UI框架中默認都以圓形表示
CheckBox在大部分UI框架中默認都以矩形表示
RadioButton和RadioGroup的關係:
一、RadioButton表示單個圓形單選框,而RadioGroup是能夠容納多個RadioButton的容器
二、每一個RadioGroup中的RadioButton同時只能有一個被選中
三、不一樣的RadioGroup中的RadioButton互不相干,即若是組A中有一個選中了,組B中依然能夠有一個被選中
四、大部分場合下,一個RadioGroup中至少有2個RadioButton
五、大部分場合下,一個RadioGroup中的RadioButton默認會有一個被選中,並建議您將它放在RadioGroup中的起始位置
一、running
二、paused
三、stopped
四、killed