系統(tǒng)架構(gòu):1.linux內(nèi)核層(為設(shè)備各種硬件提供底層驅(qū)動,如顯示驅(qū)動诗箍,音頻驅(qū)動卷中,藍(lán)牙驅(qū)動等)
? ? ? ? ? ? ? ? ? ?2.系統(tǒng)運行庫層(c/c++,dalvik和art虛擬機也在這層汪拥,Android 5.0系統(tǒng),使?ART運?環(huán)境替代 了Dalvik虛擬機)
? ? ? ? ? ? ? ? ? ? 3.應(yīng)用框架層(framework層抚垃,為應(yīng)用程序提供api)
? ? ? ? ? ? ? ? ? ? 4.應(yīng)用層(程序)
AppCompatActivity是AndroidX中提供的?種向下兼容的Activity喷楣,可以使Activity在不同系統(tǒng)版本中的功能保持?致性趟大。
kotlin的工作原理:執(zhí)行java語言的流程是 先通過java編譯器把.java文件編譯成class文件,然后在通過java虛擬機解釋成計算機能懂的二進制文件铣焊,所以我們只要拿到j(luò)ava虛擬機能讀懂的.class文件逊朽,那么計算機就能懂,所以我們通過kotlin編譯器把kotlin語言編譯成java虛擬機能讀懂的.class文件曲伊,那么kotlin也能被電腦讀懂了;
Kotlin的類型推導(dǎo)機制:不用申明變量的類型叽讳,另外kotlin沒有基本數(shù)據(jù)類型,全部是對象數(shù)據(jù)類型坟募,每個類型都有他的方法和屬性岛蚤;
? ? ? ? var a=1? ?//1是Int類型,把1賦值給了a,那a肯定是Int類型
val 和var的使用規(guī)范懈糯,盡量使用val來申明一個變量涤妒,因為val占用的內(nèi)存更小,并且值不能改變赚哗,會更穩(wěn)定她紫,更健壯
函數(shù):
fun getNum(min:Int,max:Int):Int{
return 5
}
fun largeNum(a:Int,b:Int)=max(a,b) //當(dāng)函數(shù)體只有一行代碼的時候,用=連接
條件表達式:
fun largeNum(a:Int,b:Int)=if(a>b) a else b
when表達式
fun checkNum(num: Number) = when (num) { is Int -> print("是整型") is Double -> print("是double") else -> print("不能識別")}
fun getScore(name : String)=when{ name.equals("jon") ->50 name.startsWith("tom") ->60 else ->70}
fun getInt(num:Int)=when(num){ 1 ->1 2 ->2 else ->-1}
區(qū)間:
val range=1..10 (1到10的閉區(qū)間)
val range1=1 until 10(左閉右開)
for in 循環(huán)
for (i in range step 2){ print(i)}
kotlin單例模式
object SingleTon (使用object修飾類名屿储,就表明這個類是單例類贿讹,全局只能有一個實例)
集合
val list= listOf("a","b","c") //快速初始化,創(chuàng)建不可變集合
val mutableList= mutableListOf("a","b","c") //可變集合
fun map() { val map = mutableMapOf(1 to "小米", 2 to "華為", 3 to "oppo") for ((rank, name) in map) { print("$rank==$name") }}
高階函數(shù)
list.map { it.toLowerCase()}? ?//轉(zhuǎn)換
list.maxBy { it.length }? //最大值
list.any{ it.length<2}? //是否有元素滿足該條件
list.all { it.equals("cc")}? //是否所有元素都滿足該條件
Java函數(shù)式API的使?:如果我們在Kotlin代碼中調(diào)?了?個Java?法够掠,并且該?法接收?個Java單抽象?法接?參數(shù)民褂,就可以使?函數(shù)式API。
public interface OnClickListener { void onClick(View v);} //點擊事件疯潭,是一個java單抽象方法接口
button.setOnClickListener {} //點擊事件赊堪,一種簡潔的語法糖
空安全:
?.操作符袁勺,當(dāng)對象不為空時調(diào)用方法雹食,當(dāng)對象為空時畜普,啥也不做
fun study(stident: Stident?){ stident?.study()}
?:操作符期丰,他的左右兩邊跟兩個表達式,如果左邊為null,則取右邊吃挑,如果左邊不為null,則取左邊
val aaa=list?:""
let函數(shù):下面是let函數(shù)的源碼钝荡,這段源碼表示,1.任何對象都有l(wèi)et函數(shù)舶衬,2.let函數(shù)的參數(shù)是一個函數(shù)埠通,3.參數(shù)函數(shù)接收一個參數(shù),這個參數(shù)是本身4.let函數(shù)有返回值逛犹,返回值是函數(shù)參數(shù)的返回值端辱,let函數(shù)常和?.配置使用梁剔,解決空指針判斷的問題
@kotlin.internal.InlineOnlypublic inline fun <T, R> T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this)}
字符串內(nèi)嵌表達式 $變量,或者${表達式}
"hello, $name. nice to meet you!"
函數(shù)的參數(shù)默認(rèn)值舞蔽,可以用來代替寫多少次構(gòu)函數(shù)的寫法,當(dāng)函數(shù)寫了默認(rèn)值荣病,則可以不用傳對應(yīng)的參數(shù)
class Student(val sno: String = "", val grade: Int = 0, name: String = "", age: Int = 0) : Person(name, age) {}
啟動一個新activity的最佳實踐
val intent = Intent(context, SecondActivity::class.java).apply {
putExtra("param1", "data1")
putExtra("param2", "data2")
}
context.startActivity(intent)
repeat函數(shù):重復(fù)執(zhí)行多少次,可以用來代替for循環(huán)渗柿,添加假數(shù)據(jù)
repeat(10){ mutableList.add("aaaa")}