android對於所有程序的處理態度都是盡可能不殺死。然而,資源總共就那麼多,要是對所有程序都保持寬容的話,資源總會有消耗殆盡的時候。因此,在記憶體不足的情況,android系統需要根據一定的策略,選擇性的殺死部分程序。這個策略就是對所有的程序標記優先順序,優先順序低的先殺死。
android將程序的優先順序分為5個層次,按照優先順序由高到低排列如下:
1.前台程序(foreground process)。它表明使用者正在與該程序進行互動操作,android系統依據下面的條件來將乙個程序標記為前台程序:
該程序持有乙個使用者正在與其互動的activity(也就是這個activity的生命週期方法走到了onresume()方法)。
該程序持有乙個service,並且這個service與乙個使用者正在互動中的activity進行繫結。
該程序持有乙個前台執行模式的service(也就是這個service呼叫了startforegroud()方法)。
該程序持有乙個正在執行生命週期方法(oncreate()、onstart()、ondestroy()等)的service。
該程序持有乙個正在執行onreceive()方法的broadcastreceiver。
一般情況下,不會有太多的前台程序。殺死前台程序是作業系統最後無可奈何的做法。當記憶體嚴重不足的時候,前台程序一樣會被殺死。
2.可見程序(visible process)。它表明雖然該程序沒有持有任何前台元件,但是它還是能夠影響到使用者看得到的介面。android系統依據下面的條件將乙個程序標記為可見程序:
該程序持有乙個非前台activity,但這個activity依然能被使用者看到(也就是這個activity呼叫了onpause()方法)。例如,當乙個activity啟動了乙個對話方塊,這個activity就被對話方塊擋在後面。
該程序持有乙個與可見(或者前台)activity繫結的service。
3.服務程序(service process)。除了符合前台程序和可見程序條件的service,其它的service都會被歸類為服務程序。
4.後台程序(background process)。持有不可見activity(呼叫了onstop()方法)的程序即為後台程序。通常情況下都會有很多後台程序,當記憶體不足的時候,在所有的後台程序裡面,會按照lru(最近使用)規則,優先**最長時間沒有使用過的程序。
5.空程序(empty process)。不持有任何活動元件的程序。保持這種程序只有乙個目的,就是為了快取,以便下一次啟動該程序中的元件時能夠更快響應。當資源緊張的時候,系統會平衡程序快取和底層的核心快取情況進行**。
如果乙個程序同時滿足上述5種優先順序中的多個等級條件,android系統會優先選取其中最高的等級作為該程序的優先順序。例如,乙個程序持有乙個service(服務程序等級)和乙個前台activity(前台程序等級),那麼作業系統會將這個程序標記為前台程序。
另外需要注意的是,如果乙個程序為另外乙個程序提供服務,那麼這個程序的優先順序不會低於享受服務的程序。例如,假設程序a中的content provider為程序b提供服務,或者程序a中有乙個service與程序b中的元件程序繫結,那麼程序a的優先順序至少要與程序b一致,或者高於程序b。
原文連線:android的程序優先順序
Android Android中的Http通訊
配置網路許可權,在androidmanifest.xml註冊 初始化webview,請求並且執行網路操作。mwebview webview findviewbyid r.id.mwebview msendurltask new sendurltask msendurltask.execute 在se...
android android專案架構
準備步驟 1.建立工程 設定版本相容,最低相容版本 2.匯入常用jar 包,處理字串和加密用的 jar檔案 commons lang,commons codec commons codec.jar主要是用來加密的 md5 common codec.jar md5加密 digestutils.md5h...
android android專案架構
準備步驟 1.建立工程 設定版本相容,最低相容版本 2.匯入常用jar 包,處理字串和加密用的 jar檔案 commons lang,commons codec commons codec.jar主要是用來加密的 md5 common codec.jar md5加密 digestutils.md5h...