iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 24
0
自我挑戰組

Android API超初學!!系列 第 24

[Android API] [Day 24] Activity lifecycle (4) - Process

  • 分享至 

  • xImage
  •  

今天來了解一下process,一下參考官網,那就開始吧!

每一個APP都有自己的process,但是process是否該結束,並不是由APP決定的,而是由系統決定。系統會自行判斷APP的權重、記憶體用量等,來決定該砍哪一個process。所以如果APP沒設計好,是有可能被系統錯殺掉的。
/images/emoticon/emoticon17.gif

哪時候會被錯殺呢?官網舉了一個小範例:當BroadcastReceiver收到一個intent,並建立一個thread,接著return掉onReceive()。這時系統就會以為這個receiver工作結束了,當記憶體不足時隨時可能把它砍掉。當process被砍掉時,thread也就跟著被砍掉了。解法是使用JobService,詳細使用方法這裡先跳過。

那麼,process的權重是怎麼排名的呢?

1. Foreground process

該APP正在被使用。有可能是activity停留在Resumed state,或者是BroadcastReceiver.onReceive()正在執行,又或者Service的某些callback正在被執行。

2. Visible process

APP可以被看見。有可能是activity停留在Paused stat,或是Service執行startForeground()等。

3. Service process

Service就是ㄧ些背景執行的程式。其實我覺得有些背景執行程式超重要的,居然才排名第三,很明顯的就是只注重外表的概念(系統OS:只要使用者沒發現,我就偷偷把背景程式給砍了吧)。而且執行太久(ex. 30分鐘以上)的service權重就會被降低,要注意。

4. Cached process

系統存有一些cached process是好事,這樣要再叫起該process會較快速。Cache空間有限,系統需有一套規則來決定哪些process可以被留在cache,例如least recently used演算法等。

/images/emoticon/emoticon34.gif

了解process之後,下一個疑問就會是,process間如何溝通呢?

IPC (Inter-Process Communication)

Android的IPC設計,這篇教學講的非常詳細。
總之,Android最後生出了Binder來作為IPC機制。但大多數使用者不會直接使用Binder class,而是會使用已經打包好的Android Interface Definition Language (AIDL)

關於Android IPC還有好多東西,我先把名詞記錄下來,之後好好研究。

  • Binder
  • AIDL
  • Parcelable
  • Bundle (就是我前幾篇文章使用的bundle)
  • Messenge
  • Messenger

上一篇
[Android API] [Day 23] Activity lifecycle (3) - Callback and State
下一篇
[番外篇] [Day 25] iOS Human Interface (4) 圖片解析度
系列文
Android API超初學!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言