2019年12月6日 星期五

實務 Android 第二課 - Kotlin 基本入門語法之一


數據類型:

  1. 數值 (Numbers)
  2. 字符 (Characters)
  3. 字符串 (Strings)
  4. 布林 (Boolean)
  5. 陣列 (Arrays)

一. 數值類型 (Numbers)

Kotlin 的基本數值類型有六種:Byte (8 bit)、Short (16 bit)、Int (32 bit)、Long (64 bit)、Float (32 bit)、Double (64 bit)。

運算子:+ (加)、- (減)、* (乘)、/ (除)。

val a = 1
val b = 2
val c = a+b

二. 字符類型 (C​​haracters)

Kotlin 中的字符類型採用 Char 表示,必須使用單引號' '包含起來使用 & 不能直接和數字操作。

val ch :Char = 'a'

三. 字符串類型 (Strings)

透過索引 i 來訪問的字符串中的字符:str [i]。

val str1 = "Android App"
val str2 = """
    字符串1
    字符串2
    """

四. 布林類型 (Boolean)

Kotlin 的 Boolean 類似於 Java 的 boolean 類型,其值只有 true (真值)、false (假值)。

運算子:! (NON)、|| (OR)、&& (AND)。

五. 陣列類型 (Arrays)

size 屬性、get 方法和 set 方法。

val arr1 = arrayOf(1, 2, 3)
val arr2 = Array(3, { i -> (i * 5) })

Kotlin 中的數組是不型變的 (invariant),即 Kotlin 不允許將 Array 賦值給 Array,以防止可能的運行時失敗。





2019年11月27日 星期三

實務 Android 第一課 - Activity 生命週期與創立 AppCompatActivity



Application 類可以代表整個應用程式的類別,或是說成是整個 App 的全局類別,可用於讀寫 App 的一些環境配置和屬性訊息,亦可用於當所有 Activity 都需要使用的物件時,將該物件建立於 onCreate() 中,可在任何一個 Activity 中所使用。Application 類通常較少使用,本系列課程屬於實務類型,就不多做介紹,課程重點將放在 Activity 上。

Main lifetime :

Entire lifetime:整個 Activity 從 onCreate() 開始到 onDestroy() 結束。

Visible lifetime:在 onStart() 與 onStop() 之間,User 在螢幕上可看見的。

Foreground lifetime:在 onResume() 到 onPause() 之間,可直接跟 User 進行人機互動,故此時期指的即是上圖的 Activity is running。


Activity 常見的動作流程:

啟動 Activity:
onCreate -> onStart -> onResume
啟動 Activity 時,先創造與分配資源 (onCreate),將內容顯示到螢幕上 (onStart),取得螢幕的控制權 (onResume),User 可以開始使用這個程式。

呼叫另一個 Activity:
onPause(1) -> onCreate(2) -> onStart(2) - onResume(2) -> onStop(1)
先暫停 Activity 1 (onPause),直到 Activity 2 完成一般啟動流程後,,Activity 1 才會被停止 (onStop)。

回復原 Activity:
onPause(2) -> onRestart(1) -> onStart(1) -> onResume(1) -> onStop(2) -> onDestroy(2)
按 Back 鍵可以回到原本的 Activity。

退出 / 結束 Activity:
onPause -> onStop -> onDestroy
在程式中可呼叫 finish() 函式來關閉 Activity,系統會暫停 (onPause),停止 (onStop) 然後銷毀 (onDestroy)。


創立 AppCompatActivity 之 Kotlin 程式碼:

open class MainActivity : AppCompatActivity() {

val TAG = "Main"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Log.i(TAG,"onCreate():創建 Activity")
    }

    override fun onStart() {
        super.onStart()
        Log.i(TAG,"onStart():開啟")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG,"onRestart():重新開啟")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG,"onResume():獲得焦點")
    }

    override fun onStop() {
        Log.i(TAG,"onStop():停止")
        super.onStop()
    }

    override fun onPause() {
        Log.i(TAG,"onPause():暂停")
        super.onPause()
    }

    override fun onDestroy() {
        Log.i(TAG,"onDestroy():銷毀")
        super.onDestroy()
    }

    override fun finish() {
        Log.i(TAG,"finish():結束")
        super.finish()
    }

    override fun onAttachedToWindow() {
        super.onAttachedToWindow()
        Log.i(TAG,"onAttachedToWindow():添加到界面")
    }

    override fun onDetachedFromWindow() {
        Log.i(TAG,"onDetachedFromWindow():從界面移除")
        super.onDetachedFromWindow()
    }

    override fun onTrimMemory(level: Int) {
        Log.i(TAG,"onTrimMemory(level: Int):手機內存不足回調")
        super.onTrimMemory(level)
    }