Android 的每個程式都是一個獨立的 process,一個由 jvm 執行的 java code。
java 缺少的就是 IPC,為此,android 設計了一個很大的framework來作到 process 間的通訊。
他把 Android 系統設計類似 message 驅動的系統。
message 在android 系統中稱作 intent。
每個程式就是負責接收/處理 message 的 handler (call back function)。
Android 中,要啟動一個程式,實際上是請 經由 framework 找到要啟動的 程式(class),請 dalvik load 起來,並且把 intent 交給那個 class。
每個程式(class)都可子把 intent 送給任一個 class (無論他是否已經 load 起來 run 了),
一旦另一個程式啟動 ,原來的程式就會被 push 到 task stack 中,等前方的程式結束,或是 back,才會被 pop 出來。
所以 android 的程式不是 由 main 進入,而是由 activity( ) 進入。
就這樣,整個 android 系統裡的 class,可以說是獨立,也可以說是整合在一起。
Task stack 的觀念,當stack 過深時,會發生 stack overflow,
android 設計的 memory 回收機制會把 stack 中XO 得 process 先回收。如果stack pop 到被回收的 task,android 會把他再 load 近來。
Android 的 Home 鍵,就是送 intent 給 HOME Launcher 程式,所以原程式會被 push 到 task stack。
Android 的 Back 鍵,就會把 process 結束(?),把 task stack 的程式 pop 出來。
-- 所以上次是 HOME Launcher 叫起來的程式,按下 back 鍵後,Launcher 會被叫回來。
所以 Android 系統好像沒有一個類似 shell 的 command console 和 program loader 等等。
第一個啟動的program,經由 " 送 intent 給其他 class,把 class run 起來", 串起整個系統...
沒有留言:
張貼留言