整理牛客網關於android的問題(一)

以下內容爲牛客網關於Android問題的一些整理,以便以後方便查看。
1.前臺進程最後被銷燬
前臺進程(foreground): 目前正在屏幕上顯示的進程和一些系統進程。舉例來說,Dialer Storage,Google Search等系統進程就是前臺進程;再舉例來說,當你運行一個程序,如瀏覽器,當瀏覽器界面在前臺顯示時,瀏覽器屬於前臺進程(foreground),但一旦你按home回到主界面,瀏覽器就變成了後臺程序(background)。 我們最不希望終止的進程就是前臺進程。
可見進程(visible): 可見進程是一些不在前臺,但用戶依然可見的進程,舉個例來說:widget、輸入法等,都屬於visible。這部分進程雖然不在前臺,但與我們的使用也密切相關,我們也不希望它們被終止(你肯定不希望時鐘、天氣,新聞等widget被終止,那它們將無法同步,你也不希望輸入法被終止,否則你每次輸入時都需要重新啓動輸入法)
次要服務(secondary server): 目前正在運行的一些服務(主要服務,如撥號等,是不可能被進程管理終止的,故這裏只談次要服務),舉例來說:谷歌企業套件,Gmail內部存儲,聯繫人內部存儲等。這部分服務雖然屬於次要服務,但很一些系統功能依然息息相關,我們時常需要用到它們,所以也太希望他們被終止
後臺進程(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的進程”。這給了進程管理腳本的編寫以更多的選擇。
2.AIDL:Android Interface Definition Language,即Android接口定義語言。
Android 使用AIDL提供公開服務接口,使得不同進程間可以相互通信。
建立AIDL服務要比建立普通的服務複雜一些,具體步驟如下:
(1)在Eclipse Android工程的Java包目錄中建立一個擴展名爲aidl的文件。該文件的語法類似於Java代碼,但會稍有不同。
(2)如果aidl文件的內容是正確的,ADT會自動生成一個Java接口文件(*.java)。
(3)建立一個服務類(Service的子類)。
(4)實現由aidl文件生成的Java接口。
(5)在AndroidManifest.xml文件中配置AIDL服務,尤其要注意的是,標籤中android:name的屬性值就是客戶端要引用該服務的ID,也就是Intent類的參數值。
3.Android數據持久化
主要有幾種:1.保存到Shared Preferences 2.保存到手機內存 3.保存到SDCard中 4.保存到SQlite數據庫中
4.Activity生命週期
A 設置Activity的android:screenOrientation=”portrait”屬性時,無法切換橫豎屏,因此不但不會重新調用各個生命週期方法,而且onConfigurationChanged()方法也不會執行。
B 未設置Activity的android:configChanges屬性,API上這樣說”the activity will be restarted if any of these configuration changes happen in the system.”;如何配置有改變,就會重啓activity
C launchMode爲singleTask的時候,通過Intent啓到一個Activity, 如果系統已經存在一個實例,系統就會將請求發送到這個實例上, 但這個時候,系統就不會再調用通常情況下我們處理請求數據的onCreate方法,而是調用onNewIntent方法
D 用戶正在操作某個Activity,這時如果其他應用程序需要內存。 此時的Activity是Foreground process,應該按照Empty process,Background process,Service process,Visible process順序kill,最後纔是前臺進程。
5.android通過startService的方式開啓服務,關於service生命週期的onCreate()和onStart() 說法
1. startService()的目的是回調onStart()方法,onCreate() 方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那麼Service的onCreate方法已經調用了)那麼startService()將跳過onCreate() 方法。
2. bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋樑,並不負責更多的工作(例如一個Service需要連接服務器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啓動的服務)。
由於Service 的onStart()方法只有在startService()啓動Service的情況下才調用,故使用onStart()的時候要注意這點。
6.ANR和Froce Close
ANR(Application Not Responding)定義在Android上,如果你的應用程序有一段時間響應不夠靈敏,系統會向用戶顯示一個對話框,這個對話框稱作應用程序無響應ANR。用戶可以選擇“等待”而讓程序繼續運行,也可以選擇“強制關閉”。默認情況下,在android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒
Froce Close出現情況:應用運行時拋出了OutOfMemoryError,應用運行時拋出了RuntimeException
7.Android應用程序結構
Linux Kernel(Linux內核 ) 、 Libraries( 系統運行庫或者是 c/c++ 核心庫 ) 、
Application Framework(開發框架包 ) 、 Applications ( 核心應用程序 )

8.Android 數字簽名
Android通過數字簽名來標識應用程序的作者和在應用程序之間建立信任關係,不是用來決定最終用戶可以安裝哪些應用程序。
這個數字簽名由應用程序的作者完成,並不需要權威的數字證書籤名機構認證,它只是用來讓應用程序包自我認證的。
數字簽名的兩種模式:
我們都知道Android系統不會安裝運行任何一款未經數字簽名的apk程序,無論是在模擬器上還是在實際的物理設備上。所以我們會有一個疑問,爲何在日常開發過程中我沒有進行任何簽名的操作,程序都會在模擬器和真機上運行?下面我們來講講
APK程序的兩種模式: 調試模式(debug mode)和發佈模式(release mode)
1. 調試模式(debug mode) : 在調試模式下, ADT會自動的使用debug密鑰爲應用程序簽名,因此我們可以直接運行程序。
debug密鑰: 一個名爲debug.keystore的文件
存放位置 : C:\Users\Xiaopeng.android\debug.keystore Xiaopeng對應替換爲自己操作系統的用戶名
兩個風險:
debug簽名的應用程序有這樣兩個風險:
1)debug簽名的應用程序不能在Android Market上架銷售,它會強制你使用自己的簽名;
2)debug.keystore在不同的機器上所生成的可能都不一樣,就意味着如果你換了機器進行apk版本升級,那麼將會出現上面那種程序不能覆蓋安裝的問題。
不要小視這個問題,如果你開發的程序只有你自己使用,當然無所謂,卸載再安裝就可以了。但要是你的軟件有很多使用客戶,這就是大問題了,就相當於軟件不具備升級功能!
所以一定要有自己的數字證書來簽名;
2. 發佈模式(release mode) : 當要發佈程序時,開發者就需要使用自己的數字證書給apk包簽名
使用自己的數字證書給APK簽名的兩種方法:
(1)通過DOS命令來對APK簽名。
(2)使用ADT Export Wizard進行簽名
9.andrroid 的動畫類型
1.幀動畫 Frame 一幀一幀的
2.補間動畫 Tween 慢慢過渡,設置初值和末值,並用插值器來控制過渡
3.屬性動畫 ObjectAnimation ValueAnimation 控制屬性來實現動畫。
屬性動畫是3.0以後加入的動畫。三種動畫各有各的好處和缺點
特點:
1.幀動畫 由於是一幀一幀的,所以需要圖片多。會增大apk的大小,但是這種動畫可以實現一些比較難的效果 比如說等待的環形進度。。多用這個做。
2.補間動畫 可以設置差值器和初末值來控制。相對也比較簡單,頁面切換的動畫多用這個來做。缺點,視覺上上變化,並不是真正的位置上的變化。
3.屬性動畫 最爲強大的動畫,彌補了補間動畫的缺點,實現位置+視覺的變化。並且可以自定義插值器,實現各種想要的效果。典型案例—–》衛星菜單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章