前言
程式、程序、執行緒是什麼?彼此之間又有什麼關係?
老實說這個問題我從來都沒有思考過。
直到最近計畫跳槽之後面試了幾間公司才發現,這個題目很多公司時面試時會問。
於是趁現在趕快理解清楚。
程式、程序、執行緒
程式(Program):一群程式碼的集合,用來解決特定的問題。也就是我們所撰寫的類別(Class)。
程序(Process):是執行中的程式。
執行緒(Thread):程序中最小的執行單位,負責執行目前程序中的程式碼。
通常一個程序中,至少會有一個執行緒在運作,且程序可以包含多個執行緒進行分工。
多執行緒
前面提到過:通常一個程序中,至少會有一個執行緒在運作。而這個執行緒被稱為主執行緒(或稱 UI 執行緒),負責應用程式和使用者的交互。
如果我們在主執行緒進行一些長時間的操作(比如說下載檔案之類的功能),很有可能造成主執行緒卡住,這時候如果使用者和應用程式互動(例如按下某個按鈕),則會發現畫面整個卡死(ANR)沒有反應,造成使用者體驗變差。
ANR
ANR的全名是Application is Not Responding,應用程式沒有回應。
當 Android 應用程式的 UI 執行緒被一些需要長時間的操作行為卡住,導致沒有回應時,就會觸發 ANR。
如下圖所示(借用 Android Developers 官網的圖片):
關於 ANR 的更詳細介紹,請參考 Android Developers 官網。