【Android】基本常識(已完結)

標簽:【每日一題】


25. 描述下 Android 數(shù)字簽名 【2018.1.26】

在 Android 系統(tǒng)中衍慎,所有安裝到系統(tǒng)的應用程序都必有一個數(shù)字證書杜跷,此數(shù)字證書用于標識應用程序的作者和在應用程序之間建立信任關系虚茶。
Android 系統(tǒng)要求每一個安裝進系統(tǒng)的應用程序都是經(jīng)過數(shù)字證書簽名的俐末,數(shù)字證書的私鑰則保存在程序開發(fā)者的手中芥永。Android將數(shù)字證書用來標識應用程序的作者和在應用程序之間建立信任關系聚蝶,不是用來決定最終用戶可以安裝哪些應用程序杰妓。
這個數(shù)字證書并不需要權威的數(shù)字證書簽名機構認證(CA),它只是用來讓應用程序包自我認證的碘勉。

同一個開發(fā)者的多個程序盡可能使用同一個數(shù)字證書巷挥,這可以帶來以下好處。
(1)有利于程序升級恰聘,當新版程序和舊版程序的數(shù)字證書相同時句各,Android 系統(tǒng)才會認為這兩個程序是同一個程序的不同版本吸占。如果新版程序和舊版程序的數(shù)字證書不相同,則Android系統(tǒng)認為他們是不同的程序凿宾,并產(chǎn)生沖突矾屯,會要求新程序更改包名。
(2)有利于程序的模塊化設計和開發(fā)初厚。Android系統(tǒng)允許擁有同一個數(shù)字簽名的程序運行在一個進程中件蚕,Android程序會將他們視為同一個程序。所以開發(fā)者可以將自己的程序分模塊開發(fā)产禾,而用戶只需要在需要的時候下載適當?shù)哪K排作。

在簽名時,需要考慮數(shù)字證書的有效期:
(1)數(shù)字證書的有效期要包含程序的預計生命周期,一旦數(shù)字證書失效,持有改數(shù)字證書的程序?qū)⒉荒苷I墶?br> (2)如果多個程序使用同一個數(shù)字證書琢唾,則該數(shù)字證書的有效期要包含所有程序的預計生命周期。
(3)Android Market 強制要求所有應用程序數(shù)字證書的有效期要持續(xù)到 2033 年 10 月 22 日以后衫生。

Android 數(shù)字證書包含以下幾個要點:
(1)所有的應用程序都必須有數(shù)字證書,Android 系統(tǒng)不會安裝一個沒有數(shù)字證書的應用程序
(2)Android 程序包使用的數(shù)字證書可以是自簽名的土浸,不需要一個權威的數(shù)字證書機構簽名認證
(3)如果要正式發(fā)布一個 Android 罪针,必須使用一個合適的私鑰生成的數(shù)字證書來給程序簽名,而不能使用 adt 插件或者 ant 工具生成的調(diào)試證書來發(fā)布黄伊。
(4)數(shù)字證書都是有有效期的泪酱,Android 只是在應用程序安裝的時候才會檢查證書的有效期。如果程序已經(jīng)安裝
在系統(tǒng)中还最,即使證書過期也不會影響程序的正常功能

24. Android 中布局的優(yōu)化措施都有哪些墓阀?

1、盡可能減少布局的嵌套層級
可以使用 sdk 提供的hierarchyviewer工具分析視圖樹憋活,幫助我們發(fā)現(xiàn)沒有用到的布局岂津。
2、不用設置不必要的背景悦即,避免過度繪制
比如父控件設置了背景色,子控件完全將父控件給覆蓋的情況下橱乱,那么父控件就沒有必要設置背景辜梳。
3、使用include標簽復用相同的布局代碼
4泳叠、使用merge標簽減少視圖層次結構
該標簽主要有兩種用法:
1) 因 為 所 有 的 Activity 視 圖 的 根 節(jié) 點 都 是 FrameLayout 作瞄, 因 此 如 果 我 們 的 自 定 義 的 布 局 也 是FragmenLayout 的時候那么可以使用 merge 替換。
2) 當應用 Include或者ViewStub標簽從外部導入xml結構時危纫,可以將被導入的 xml 用 merge作為根節(jié)點表示宗挥,這樣當被嵌入父級結構中后可以很好的將它所包含的子集融合到父級結構中乌庶,而不會出現(xiàn)冗余的節(jié)點。
merge只能作為 xml 布局的根元素契耿。
5瞒大、通過ViewStub實現(xiàn) View 的延遲加載

23. android:layout_gravity 和 android:gravity 的區(qū)別?

第一個是讓該布局在其父控件中的布局方式搪桂,第二個是該布局布置其子視圖的布局方式透敌。

22. Padding 和 Margin 有什么區(qū)別?

padding內(nèi)填充踢械,margin外邊距
padding 是站在父 view的角度描述問題酗电,它規(guī)定它里面的內(nèi)容必須與這個父 view 邊界的距離。margin則是站在自己的角度描述問題内列,規(guī)定自己和其他(上下左右)的view之間的距離撵术,如果同一級只有一個view,那么它的效果基本上就和 padding 一樣了话瞧。

21. 什么是 ANR 如何避免它嫩与?

在 Android 上,如果你的應用程序有一段時間響應不夠靈敏移稳,系統(tǒng)會向用戶顯示一個對話框蕴纳,這個對話框稱作應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇讓程序繼續(xù)運行个粱,但是古毛,他們在使用你的應用程序時,并不希望每次都要處理這個對話框都许。因此稻薇,在程序里對響應性能的設計很重要,這樣胶征,系統(tǒng)不會顯示ANR 給用戶塞椎。
不同的組件發(fā)生 ANR 的時間不一樣,主線程(Activity睛低、Service)是 5 秒案狠,BroadCastReceiver 是 10 秒。
解決方案:
將所有耗時操作钱雷,比如訪問網(wǎng)絡骂铁,Socket 通信,查詢大量 SQL 語句罩抗,復雜邏輯計算等都放在子線程中去拉庵,然后通過handler.sendMessage、runonUITread套蒂、AsyncTask等方式更新UI钞支。無論如何都要確保用戶界面操作的流暢度茫蛹。如果耗時操作需要讓用戶等待,那么可以在界面上顯示進度條烁挟。

20. Android中的動畫 【2018.1.25更新】

主要有三種動畫:幀動畫婴洼、補間動畫、屬性動畫(3.0增加)信夫。
補間動畫窃蹋,通過在兩個關鍵幀之間補充漸變的動畫效果來實現(xiàn),其優(yōu)點是可以節(jié)省空間

幀動畫静稻,其原理是在“連續(xù)的關鍵幀”中分解動畫動作警没,也就是在時間軸的每幀上逐幀繪制不同的內(nèi)容,使其連續(xù)播放而成動畫振湾。圖片不易過多過大杀迹,不然容易產(chǎn)生OOM。

屬性動畫押搪,改變的是對象的實際屬性树酪,ValueAnimator和ObjectAnimator是屬性動畫的兩個核心類。

19. Android中的常用布局

  • Linearlayout 線性布局
  • RelativeLayout 相對布局
  • FrameLayout 幀布局
  • GridLayout 網(wǎng)格布局
  • TableLayout 表格布局
  • AbsoluteLayout 絕對布局
  • ConstraintLayout 約束布局

18. Android中的四大組件

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

只有廣播可以不在清單文件中注冊

17. Android 中數(shù)據(jù)存儲方式有哪些大州?

  • 文件存儲
  • xml续语,SharedPreference
  • SQLiteDatabase
  • ContentProvider
  • 網(wǎng)絡

16. sp 頻繁操作有什么后果?sp 能存多少數(shù)據(jù)厦画?【2018.1.24】

Sp 的底層是由 xml 來實現(xiàn)的疮茄,操作 sp 的過程就是 xml的序列化和解析的過程。Xml 是存儲在磁盤上的根暑,因此考慮到需要 I/O 速度問題力试,sp 不適宜頻繁操作。同時序列化 xml是就是將內(nèi)存中的數(shù)據(jù)寫到 xml 文件中排嫌,由于 dvm 的內(nèi)存是很有限的畸裳,因此單個 sp文件不建議太大,具體多大是沒有一個具體的要求的淳地,但是我們知道 DVM 堆內(nèi)存也就是 16M怖糊,因此數(shù)據(jù)大小肯定不能超過這個數(shù)字的。其實 sp 設置的目的就是為了保存用戶的偏好和配置信息的颇象,因此不要保存太多的數(shù)據(jù)蓬抄。

15. Android 的四大組件都需要在清單文件中注冊嗎?

Activity 夯到、 Service 、 ContentProvider 如 果 要 使 用 則 必 須 在AndroidManifest.xml 中 進 行 注 冊 饮亏, 而BroadcastReceiver 則有兩種注冊方式耍贾,靜態(tài)注冊和動態(tài)注冊阅爽。其中靜態(tài)注冊就是指在 AndroidManifest.xml 中進行注冊,而動態(tài)注冊時通過代碼注冊

14. 一條最長的短信息約占多少 byte?

在國內(nèi)的三大運營商通常情況下中文 70(包括標點)荐开,英文 160 個付翁。對于國外的其他運行商具體多長需要看運營商類型了。
android 內(nèi)部是通過如下代碼進行判斷具體一個短信多少 byte 的晃听。
ArrayList<String> android.telephony.SmsManager.divideMessage(String text)

13. ddms 和 traceview 的區(qū)別

ddms 原意是:davik debug monitor service百侧。簡單的說 ddms是一個程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息能扒,traceView 是程序性能分析器佣渴。traceview 是 ddms 中的一部分內(nèi)容。

12. 請介紹下 adb初斑、ddms辛润、aapt 的作用

adb 是 Android Debug Bridge ,Android 調(diào)試橋的意思,
ddms 是 Dalvik Debug Monitor Service见秤,dalvik 調(diào)試監(jiān)視服務砂竖。
aapt 即 Android Asset Packaging Tool,在SDK的build-tools目錄下鹃答。該工具可以查看乎澄,創(chuàng)建,更新ZIP格式的文檔附件(zip,jar,apk)测摔。也可將資源文件編譯成二進制文件置济,盡管我們沒有直接使用過該工具,但是開發(fā)工具會使用這個工具打包 apk 文件構成一個 Android 應用程序避咆。

Android 的主要調(diào)試工具是 adb(Android debuging bridge)舟肉,ddms是一個在 adb 基礎上的一個圖形化工具。
adb查库,它是一個命令行工具路媚。而 ddms 功能與 adb相同,只是它有一個圖形化界面樊销。對不喜歡命今操作方式的人來說是一個不錯的選擇整慎。

11. 啟動應用后,改變系統(tǒng)語言围苫,應用的語言會改變么裤园?

這個一般是不會的,一般需要重啟應用才能改變應用語言剂府。但是對應應用來說如果做了國際化處理則支持如果沒
有處理那系統(tǒng)語言再更改也是無用的拧揽。

10. dvm 的進程和 Linux 的進程,應用程序的進程是否為同一個概念?【2018.1.23更新】

dvm 指 dalvik 的虛擬機。每一個 Android 應用程序都擁有一個獨立的 Dalvik 虛擬機實例,應用程序都在它自己的進程中運行淤袜。而每一個 dvm 都是在 Linux 中的一個進程痒谴,所以說可以近似認為是同一個概念。

什么是 android DVM:Dalvik 是 Google 公司自己設計用于 Android 平臺的 Java 虛擬機,每一個 Dalvik 應用作為一個獨立的 Linux進程執(zhí)行铡羡。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉积蔚。

Dalvik 和 Java 虛擬機的區(qū)別
1:Dalvik 主要是完成對象生命周期管理,堆棧管理烦周,線程管理尽爆,安全和異常管理,以及垃圾回收等等重要功能读慎。
2:Dalvik 負責進程隔離和線程管理漱贱,每一個 Android 應用在底層都會對應一個獨立的 Dalvik 虛擬機實例,其代碼在虛擬機的解釋下得以執(zhí)行贪壳。
3:不同于 Java 虛擬機運行 java 字節(jié)碼饱亿,Dalvik 虛擬機運行的是其專有的文件格式 Dex
4: dex 文件格式可以減少整體文件尺寸,提高 I/O 操作的類查找速度闰靴。
5: odex 是為了在運行過程中進一步提高性能彪笼,對 dex 文件的進一步優(yōu)化。
6:所有的 Android 應用的線程都對應一個 Linux 線程蚂且,虛擬機因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機制
7:有一個特殊的虛擬機進程 Zygote配猫,他是虛擬機實例的孵化器。它在系統(tǒng)啟動的時候就會產(chǎn)生杏死,它會完成虛擬機的初始化泵肄,庫的加載,預制類庫和初始化的操作淑翼。如果系統(tǒng)需要一個新的虛擬機實例腐巢,它會迅速復制自身,以最快的數(shù)據(jù)提供給系統(tǒng)玄括。對于一些只讀的系統(tǒng)庫冯丙,所有虛擬機實例都和 Zygote共享一塊內(nèi)存區(qū)域。

9. Android 程序與 Java 程序的區(qū)別遭京?

Android 程序用 android sdk 開發(fā),java 程序用 javasdk 開發(fā).
Android SDK 引用了大部分的 Java SDK胃惜,少數(shù)部分被 Android SDK 拋棄

8. 談一談 Android 的安全機制

1、Android 是基于 Linux 內(nèi)核的哪雕,因此 Linux 對文件權限的控制同樣適用于 Android
在 Android 中每個應用都有自己的/data/data/包名 文件夾船殉,該文件夾只能該應用訪問,而其他應用則無權
訪問斯嚎。

2利虫、Android 的權限機制保護了用戶的合法權益
如果我們的代碼想撥打電話挨厚、發(fā)送短信、訪問通信錄列吼、定位幽崩、訪問 sdcard 等所有可能侵犯用于權益的行為都是必須要在AndroidManifest.xml 中進行聲明的,這樣就給了用戶一個知情權寞钥。

3、Android 的代碼混淆保護了開發(fā)者的勞動成果

7. 談談Android的不足和優(yōu)點

優(yōu)點:
1陌选、開放性理郑,開源,免費咨油,可定制
2您炉、掙脫運營商束縛
3、豐富的硬件選擇
4役电、不受任何限制的開發(fā)商
5赚爵、無縫結合的 Google 應用
缺點:
1、安全問題法瑟、隱私問題
2冀膝、同質(zhì)化嚴重
3、運營商對 Android 手機仍然有影響
4霎挟、山寨化嚴重
5窝剖、過分依賴開發(fā)商,缺乏標準配置

6. Android中進程級別酥夭、內(nèi)存不足時回收順序赐纱?【2018.1.22更新】

1. 空進程(Empty Process)
   不包含任何活動應用程序組件,這種進程存在的唯一原因是做為緩存以改善組件再次于其中運行時的啟動時間
   
2. 后臺進程(Background process)
   不可見狀態(tài)的activity進程熬北,onstop被調(diào)用
   
3. 服務進程(Service Process)
   由 startService() 方法啟動的服務疙描,一般都在做著用戶所關心的事情,系統(tǒng)會盡量維持它們的運行

4. 可見進程(Visible Process)
   activity不在前端顯示讶隐,但也沒有完全隱藏起胰,能夠看得見,比如彈出一個對話框

5. 前臺進程(Foreground Process)
   有正在與用戶交互的Activity

5. Android API級別

image

4. Android工程目錄結構

文件(夾)名 用途
.gradleGradle 編譯系統(tǒng)整份,版本由wrapper指定
.idea Android Studio IDE所需要的文件
build 代碼編譯后生成的文件存放的位置
gradle wrapper的jar和配置文件所在的位置
.gitignore git使用的ignore文件
build.gradle gradle編譯的相關配置文件(相當于Makefile)
gradle.properties gradle相關的全局屬性設置
gradlew *nix下的gradle wrapper可執(zhí)行文件
graldew.bat windows下的gradle wrapper可執(zhí)行文件
local.properties 本地屬性設置(key設置待错,android sdk位置等屬性),這個文件是不推薦上傳到VCS中去的
settings.gradle 和設置相關的gradle腳本

Project目錄:

文件(夾)名 用途
.gradleGradle 編譯系統(tǒng)烈评,版本由wrapper指定
.idea Android Studio IDE所需要的文件
build 代碼編譯后生成的文件存放的位置
gradle wrapper的jar和配置文件所在的位置
.gitignore git使用的ignore文件
build.gradle gradle編譯的相關配置文件(相當于Makefile)
gradle.properties gradle相關的全局屬性設置
gradlew *nix下的gradle wrapper可執(zhí)行文件
graldew.bat windows下的gradle wrapper可執(zhí)行文件
local.properties 本地屬性設置(key設置火俄,android sdk位置等屬性),這個文件是不推薦上傳到VCS中去的
settings.gradle 和設置相關的gradle腳本
文件(夾)名 用途
build 編譯后的文件存在的位置(包括最終生成的apk也在這里面)
libs 依賴的庫所在的位置(jar和aar)
src 源代碼所在的目錄
src/main 主要代碼所在位置(src/androidTest)就是測試代碼所在位置了
src/main/assets android中附帶的一些文件
src/main/java 最最重要的讲冠,我們的java代碼所在的位置
src/main/jniLibs jni的一些動態(tài)庫所在的默認位置(.so文件)
src/main/res android資源文件所在位置
src/main/AndroidManifest.xml AndroidManifest不用介紹了吧~
build.gradle 和這個項目有關的gradle配置瓜客,相當于這個項目的Makefile,一些項目的依賴就寫在這里面
proguard.pro 代碼混淆配置文件

Module目錄:

文件(夾)名 用途
build 編譯后的文件存在的位置(包括最終生成的apk也在這里面)
libs 依賴的庫所在的位置(jar和aar)
src 源代碼所在的目錄
src/main 主要代碼所在位置(src/androidTest)就是測試代碼所在位置了
src/main/assets android中附帶的一些文件
src/main/java 最最重要的,我們的java代碼所在的位置
src/main/jniLibs jni的一些動態(tài)庫所在的默認位置(.so文件)
src/main/res android資源文件所在位置
src/main/AndroidManifest.xml AndroidManifest不用介紹了吧~
build.gradle 和這個項目有關的gradle配置谱仪,相當于這個項目的Makefile玻熙,一些項目的依賴就寫在這里面
proguard.pro 代碼混淆配置文件

3. Apk打包流程

1、打包資源文件疯攒,生成R.java文件
2嗦随、處理aidl文件,生成相應java 文件
3敬尺、編譯工程源代碼枚尼,生成相應class 文件
4、轉(zhuǎn)換所有class文件砂吞,生成classes.dex文件
5署恍、打包生成apk
6、對apk文件進行簽名
7蜻直、對簽名后的apk文件進行處理

2. DVM 和 JVM 區(qū)別

a) dvm 執(zhí)行的是.dex 文件盯质,而 jvm 執(zhí)行的是.class。Android 工程編譯后的所有.class 字節(jié)碼會被 dex 工具抽取到一個.dex 文件中概而。

b) dvm 是基于寄存器的虛擬機 而 jvm 執(zhí)行是基于虛擬棧的虛擬機呼巷。寄存器存取速度比棧快的多到腥,dvm 可以根據(jù)硬件實現(xiàn)最大的優(yōu)化朵逝,比較適合移動設備。

c) .class 文件存在很多的冗余信息乡范,dex 工具會去除冗余信息配名,并把所有的.class 文件整合到.dex 文件中。減少了 I/O 操作晋辆,提高了類的查找速度渠脉。

1. Android系統(tǒng)架構

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瓶佳,隨后出現(xiàn)的幾起案子芋膘,更是在濱河造成了極大的恐慌,老刑警劉巖霸饲,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件为朋,死亡現(xiàn)場離奇詭異,居然都是意外死亡厚脉,警方通過查閱死者的電腦和手機习寸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傻工,“玉大人霞溪,你說我怎么就攤上這事孵滞。” “怎么了鸯匹?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵坊饶,是天一觀的道長。 經(jīng)常有香客問我殴蓬,道長匿级,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任科雳,我火速辦了婚禮根蟹,結果婚禮上,老公的妹妹穿的比我還像新娘糟秘。我一直安慰自己,他們只是感情好球散,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布尿赚。 她就那樣靜靜地躺著,像睡著了一般蕉堰。 火紅的嫁衣襯著肌膚如雪凌净。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天屋讶,我揣著相機與錄音冰寻,去河邊找鬼。 笑死皿渗,一個胖子當著我的面吹牛斩芭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播乐疆,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼划乖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了挤土?” 一聲冷哼從身側響起琴庵,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仰美,沒想到半個月后迷殿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡咖杂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年庆寺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翰苫。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡止邮,死狀恐怖这橙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情导披,我是刑警寧澤屈扎,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站撩匕,受9級特大地震影響鹰晨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜止毕,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一模蜡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扁凛,春花似錦忍疾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至字币,卻和暖如春则披,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洗出。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工士复, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人翩活。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓阱洪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親隅茎。 傳聞我的和親對象是個殘疾皇子澄峰,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容