不知道有沒有人好奇為什麼 Android APP 是用 Java 或 Kotlin 撰寫的呢?
Android 其實是個 Linux 作業系統,APP 開發時寫的是 Java 或 Kotlin,經過組譯器組譯後會生成 class 檔案,裡面是 Java Virtual Machine (JVM) bytecode,到這裡為止是一般 JVM-based 程式的組譯流程,但 Android 上能運行的是 Dalvik bytecode,所以要把 JVM bytecode 轉成 Dalvik bytecode,APP 安裝時會由 Android Runtime (ART) 先編譯部份的 bytecode 成為 machine code (Ahead-Of-Time compilation) 。
平常的程式可能是從 main 函式開始執行,在 Android 則是 Activity.onCreate()
。
Android 與於一般 Linux 不一樣的是,為了節省效能會區分前景與背景程式,切換到背景時會暫停,在資源不足時還會中止運行,所以需要根據生命週期做出對應處理,避免造成使用者體驗不佳。
Application 其實比 Activity 早開始執行的,但它就像 Linux ELF 的 __libc_start_main()
一樣,平常不需要知道、用到它,除非需要在跨 Activity 的情況下拿到 Context。