diff options
Diffstat (limited to 'files/zh-tw/archive/b2g_os/platform')
7 files changed, 333 insertions, 0 deletions
diff --git a/files/zh-tw/archive/b2g_os/platform/apps_architecture/index.html b/files/zh-tw/archive/b2g_os/platform/apps_architecture/index.html new file mode 100644 index 0000000000..2524c81d0b --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/apps_architecture/index.html @@ -0,0 +1,24 @@ +--- +title: Firefox OS apps 架構 +slug: Archive/B2G_OS/Platform/Apps_architecture +translation_of: Archive/B2G_OS/Platform/Apps_architecture +--- +<div class="summary"> + <p>本文旨在說明 Firefox OS 內部如何管理和啟動應用程式,主要是針對 Firefox OS 平台開發者以及正在移植 Firefox OS 到新硬體裝置上的開發者,如果你只是一個單純 App 開發者並不會需要知道,不過有興趣的話還是可以看看了解 Firefox OS。</p> +</div> +<h2 id="App_啟動程序">App 啟動程序</h2> +<p>當 app 被啟動時,主畫面 app (Home screen app) 會透過 {{domxref("App")}} API 取得 app 的參照,然後呼叫 {{domxref("App.launch()")}} 方法來啟動 app。</p> +<p>Gecko 收到相關請求後會發送一個含有 app 詳細資訊的 {{domxref("mozChromeEvent")}} 到系統 app (System app),系統 app 接著會將一個 {{HTMLElement("iframe")}} 加入 DOM 樹(DOM tree)中,然後將 app 載入該 {{HTMLElement("iframe")}} 裡,直到 app 終止前這個 iframe 就是 app 的家。</p> +<p>每一支 app 都需要一個描述該 app 的 manifest 檔,app 包也需要遵照特定檔案階層,詳情請見 <a href="/en-US/docs/Web/Apps/App_Manifest">App manifest</a>。</p> +<h2 id="和_Gecko_溝通">和 Gecko 溝通</h2> +<p>Gecko 和 Gaia' 系統 app 之間的溝通是經由 {{domxref("mozChromeEvent")}} 以及 {{domxref("mozContentEvent")}} 完成。 <code>mozChromeEvent</code>s 是從 chrome 廣播到內容,而 <code>mozContentEvent</code>s 是從內容廣播到 chrome,這些溝通主要在控管受信任 UI 的創建與終止,還有在為通知和其他任務,包括通知系統 app 啟動某個 app,提供必要的功能。</p> +<div class="note"> + <p><strong>Note:</strong> 請參考 <a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/System">System app 文件</a> 以取得更多有關這些事件如何運作的細節,同時也可以參考相關的原始碼 {{source("b2g/chrome/content/shell.js")}}。</p> +</div> +<h2 id="延伸閱讀">延伸閱讀</h2> +<ul> + <li><a href="/en-US/docs/Web/Apps">Apps</a></li> + <li>{{domxref("App")}}</li> + <li><a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/System">System app</a></li> + <li><a href="/en-US/Firefox_OS/Platform/Architecture">Firefox OS architecture</a></li> +</ul> diff --git a/files/zh-tw/archive/b2g_os/platform/gaia/gaia_apps/index.html b/files/zh-tw/archive/b2g_os/platform/gaia/gaia_apps/index.html new file mode 100644 index 0000000000..4a284db78e --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/gaia/gaia_apps/index.html @@ -0,0 +1,78 @@ +--- +title: Gaia apps +slug: Archive/B2G_OS/Platform/Gaia/Gaia_apps +translation_of: Archive/B2G_OS/Platform/Gaia/Gaia_apps +--- +<div class="summary"> + <p><span class="seoSummary">Gaia 位在 Firefox OS 的上層,其中包含系統管理功能以及一系列 Firefox OS 內建 apps。所有 Gaia 的原始碼 — 即便系統和鍵盤輸入法 — 都是由 HTML5 (HTML + CSS + JavaScript) 和 Open WebAPIs 技術所建構而成的,本文旨在說明 Gaia 內建的 apps 是如何運作之。</span></p> +</div> +<h2 id="Gaia_功能類別">Gaia 功能類別</h2> +<p>Gaia 內不同的 apps 大致上可以分成以下幾類。</p> +<div class="note"> + <p><strong>Note</strong>: 許多 app 運作說明都會連結到 <a href="https://github.com/mozilla-b2g/gaia/">Gaia Github repo</a> 上的 README 頁面,那是因為很多 app 都還在快速開發迭代階段,常常會有更動,所以一直更新 MDN 相當不切實際,如果想要進一步獲取最新的資訊,請再參考各 README 頁面。</p> +</div> +<h3 id="平台類">平台類</h3> +<p>包括系統、設定、螢幕鎖定、建置腳本和藍芽 apps。</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/7503/platform_team.png" style="width: 355px; height: 269px; margin: 0px auto; display: block;"></p> +<h4 id="平台類_apps">平台類 apps:</h4> +<dl> + <dt> + <a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/System">系統 (System)</a></dt> + <dd> + System app 是第一個在 <a href="https://developer.mozilla.org/en-US/Firefox_OS/Platform/Architecture#Firefox_OS_bootup_procedure">Firefox OS 開機程序 </a>中被 Gecko 載入的web app,它負責處理許許多多系統運行工作,所以不算是在一般個別 web app 的範疇內。</dd> + <dt> + <a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/Browser">瀏覽器 (Browser)</a></dt> + <dd> + Browser app (現在算是 System 一部分) 當有相關需求時,如網頁瀏覽、搜尋或書籤標記,提供瀏覽器類的功能。</dd> + <dt> + <a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/Window_Management">視窗管理 (Window Management)</a></dt> + <dd> + Firefox OS 視窗管理功能 — 包括 app 生命週期和互動、通知、動畫等等 — 由 System app 特定一塊負責。</dd> + <dt> + <a href="/en-US/Firefox_OS/Platform/Gaia/Gaia_apps/Settings">設定 (Settings)</a></dt> + <dd> + Settings app 讓使用者設定裝置、回應當前活動呼叫 (帶有 <code>configure</code> 名稱的<a href="/en-US/docs/WebAPI/Web_Activities"> Web 活動</a>),讓其他 app 可以跳轉到 Settings app 其中的設定面板處理需要的設定任務 (例如說顯示 wifi 設定面板當數據傳輸無法使用時)。</dd> +</dl> +<h3 id="通訊類">通訊類</h3> +<p>包括 Dialer, Contact, SMS apps 與 FTU apps.</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/7499/comms_team.png" style="width: 317px; height: 246px; margin: 0px auto; display: block;"></p> +<h3 id="生產力類">生產力類</h3> +<p>包括 Email, Calendar, 與 Clock apps.</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/7505/productivity_team.png" style="width: 303px; height: 178px; margin: 0px auto; display: block;"></p> +<h4 id="生產力類_apps">生產力類 apps:</h4> +<dl> + <dt> + <a href="https://github.com/mozilla-b2g/gaia/blob/master/apps/calendar/README.md">日歷 (Calendar)</a></dt> + <dd> + Firefox OS 內建 calendar app.</dd> + <dt> + <a href="https://github.com/mozilla-b2g/gaia/blob/master/apps/clock/README.md">時鐘 (Clock</a>)</dt> + <dd> + Firefox OS 預設 Clock app,具備鬧鈴、計時等功能</dd> + <dt> + <a href="https://github.com/mozilla-b2g/gaia/blob/master/apps/email/README.md">Email</a></dt> + <dd> + Gaia e-mail app.</dd> +</dl> +<h3 id="媒體類">媒體類</h3> +<p>包括 Camera, Gallery, Music, 和 Video apps 等等媒體相關功能,如桌布和轉送 DRM 鎖。</p> +<p><img alt="" src="https://mdn.mozillademos.org/files/7501/media_team.png" style="width: 386px; height: 250px; margin: 0px auto; display: block;"></p> +<h4 id="媒體類_apps">媒體類 apps:</h4> +<dl> + <dt> + <a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Gaia_apps/Video">影音 (Video)</a></dt> + <dd> + Video 是影音媒體撥放器。</dd> + <dt> + <a href="https://github.com/mozilla-b2g/gaia/blob/master/apps/camera/README.md">相機 (Camera)</a></dt> + <dd> + Firefox OS 使用者透過相機照相、錄影,它也會回應 type 為pick 的 <a href="/en-US/docs/WebAPI/Web_Activities">Web 活動</a>,讓其他想使用相機功能的 app 使用相機。</dd> +</dl> +<h3 id="其他_Gaia_特色功能">其他 Gaia 特色功能</h3> +<p>除了上述功能,Gaia 還有其他功能如 browser, homescreen, marketplace, test framework, PDF viewer, 和 app manager 等。</p> +<dl> + <dt> + <a href="https://github.com/mozilla/pdf.js/blob/master/README.md">pdf.js</a></dt> + <dd> + pdf.js 是 HTML5 基礎的 PDF 瀏覽器,Gaia 用其來瀏覽 PDF,請注意 pdf.js 的程式碼庫 (repo) 和 Gaia 是分開來的。</dd> +</dl> diff --git a/files/zh-tw/archive/b2g_os/platform/gaia/index.html b/files/zh-tw/archive/b2g_os/platform/gaia/index.html new file mode 100644 index 0000000000..d2a4886cf1 --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/gaia/index.html @@ -0,0 +1,68 @@ +--- +title: Gaia +slug: Archive/B2G_OS/Platform/Gaia +tags: + - B2G + - Gaia + - Mobile + - NeedsTranslation + - TopicStub +translation_of: Archive/B2G_OS/Platform/Gaia +--- +<p>Gaia is the user interface level of <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS" title="Mozilla/Firefox_OS">Firefox OS</a>. Everything that appears on the screen after Firefox OS starts up is drawn by Gaia, including the lock screen, home screen, dialer, and other applications. Gaia is written entirely in <a href="https://developer.mozilla.org/en-US/docs/en-US/HTML" title="HTML">HTML</a>, <a href="https://developer.mozilla.org/en-US/docs/CSS" title="CSS">CSS</a>, and <a href="https://developer.mozilla.org/en-US/docs/JavaScript" title="JavaScript">JavaScript</a>. Its only interface to the underlying operating system and hardware is through standard Web APIs, which are implemented by <a href="https://developer.mozilla.org/en-US/docs/Gecko" title="Gecko">Gecko</a>.</p> +<p>Because of this design, not only can Gaia be run on Firefox OS devices, but also on other operating systems and in other web browsers (Albeit with potentially degraded functionality depending on the capabilities of the browser).</p> +<p>Third party applications onto the device installed alongside Gaia can be launched by Gaia.</p> +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">Documentation about Gaia</h2> + <dl> + <dt> + <a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Introduction_to_Gaia" title="Mozilla/Boot_to_Gecko/Introduction to Gaia">Introduction to Gaia</a></dt> + <dd> + Gaia is the user interface application for Firefox OS devices; it's simply a Web application running atop the Firefox OS software stack. This guide introduces Gaia at a high level.</dd> + <dt> + <a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Hacking" title="Mozilla/Boot_to_Gecko/Gaia hacking guide">Gaia hacking guide</a></dt> + <dd> + A guide to hacking and modifying the Gaia interface.</dd> + <dt> + <a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Build_System_Primer" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Build_System_Primer">Gaia Build System Primer</a></dt> + <dd> + Most of the meaniful work for the build steps are performed by the scripts that live inside the build/ subdirectory of Gaia.</dd> + <dt> + <a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Hacking_Tips_And_FAQ" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Gaia/Hacking_Tips_And_FAQ">Gaia Hacking Tips And FAQ</a></dt> + <dd> + A list of helpful tips and frequently asked questions around hacking on Gaia.</dd> + </dl> + <p><span class="alllinks"><a href="/en-US/docs/tag/Gaia" title="tag/B2G">View All...</a></span></p> + </td> + <td> + <h2 class="Community" id="Community" name="Community">Getting help from the community</h2> + <p>If you're working with Gaia, or developing Gaia applications, there are community resources to help you!</p> + <ul> + <li>Consult the Boot to Gecko project forum: {{ DiscussionList("dev-gaia", "mozilla.dev.gaia") }}</li> + </ul> + <p> </p> + <br> + <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">Related topics</h2> + <ul> + <li><a href="/en-US/docs/Mobile" title="Mobile">Mobile</a></li> + <li><a href="/en-US/docs/Web" title="/en-US/docs/Web">Web Technology for developer</a> + <ul> + <li><a href="/en-US/docs/HTML" title="HTML">HTML</a></li> + <li><a href="/en-US/docs/CSS" title="CSS">CSS</a></li> + <li><a href="/en-US/docs/JavaScript" title="JavaScript">JavaScript</a></li> + </ul> + </li> + <li><a href="/en-US/docs/WebAPI" title="/en-US/docs/WebAPI">WebAPI</a></li> + </ul> + <h2 class="Tools" id="Resources" name="Resources">Resources</h2> + <ul> + <li><a href="/en-US/docs/Mozilla/Firefox_OS/Architecture" title="Mozilla/Firefox_OS/Architecture">Firefox OS architecture overview</a></li> + </ul> + </td> + </tr> + </tbody> +</table> +<p> </p> diff --git a/files/zh-tw/archive/b2g_os/platform/gaia/introduction_to_gaia/index.html b/files/zh-tw/archive/b2g_os/platform/gaia/introduction_to_gaia/index.html new file mode 100644 index 0000000000..27c9ea5ea4 --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/gaia/introduction_to_gaia/index.html @@ -0,0 +1,13 @@ +--- +title: Gaia 簡介 +slug: Archive/B2G_OS/Platform/Gaia/Introduction_to_Gaia +translation_of: Archive/B2G_OS/Platform/Gaia/Introduction_to_Gaia +--- +<p><a class="external" href="/en/Mozilla/Boot_to_Gecko/Gaia" title="en/Mozilla/Boot_to_Gecko/Gaia">Gaia</a> 是 Boot to Gecko (B2G) 的使用者介面;它只是在 B2G 裝置、模擬器、桌上型電腦版本、或是 Firefox 版本上運作的一個網頁應用程式 (Web application)。如果想要在 Gaia 上添加 apps 程式或是做一些改變的話,所有你需要了解的就是網頁科技 (Web Technologies),例如 <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>、 <a href="/en/HTML" title="en/HTML">HTML</a>、和 <a href="/en/CSS" title="en/CSS">CSS</a>。</p> +<h2 id="Gaia_的鎖定畫面">Gaia 的鎖定畫面</h2> +<p>鎖定畫面預設是啟動的,而預設解鎖密碼 (PIN) 是「0000」。隨著這個功能會隨著時間愈趨完整。</p> +<h2 id="預設的_Gaia_介面">預設的 Gaia 介面</h2> +<p>Gaia 的預設介面跟大家所見最典型的智慧型手機相仿,如這邊所看到的圖。</p> +<p><a href="/@api/deki/files/6276/=screenshot.png" title="screenshot.png"><img align="left" alt="screenshot.png" class="internal lwrap" src="/@api/deki/files/6276/=screenshot.png?size=webview" style="width: 330px; height: 550px;"></a>這是張 prerelease 版本作業系統的圖,有一些暫時使用的圖示(和一些測試的程式)。頂端的狀態條顯示手機正在使用哪個行動網路 (如果行動裝置沒有網路的話,會顯示「No SIM card」)、行動網路強度、WiFi 訊號強度、電池使用狀態、和現在的時間。</p> +<p>畫面的中間區域顯示應用程式的圖示;透過螢幕的圖示切換左右頁。</p> +<p>在螢幕的底部是一個底座,可以放四個最常用的應用程式。現在底座還不能修改,且被預設顯示播號 (Dialer)、訊息 (Messages)、市集 (Market)、和瀏覽器 (Browser)的程式。</p> diff --git a/files/zh-tw/archive/b2g_os/platform/gonk/index.html b/files/zh-tw/archive/b2g_os/platform/gonk/index.html new file mode 100644 index 0000000000..71d064ac30 --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/gonk/index.html @@ -0,0 +1,22 @@ +--- +title: Gonk +slug: Archive/B2G_OS/Platform/Gonk +translation_of: Archive/B2G_OS/Platform/Gonk +--- +<p>{{draft()}}</p> +<div class="summary"> + <p>Gonk是<a href="/en-US/docs/Mozilla/Firefox_OS" style="line-height: 1.5;" title="/en-US/docs/Mozilla/Firefox_OS">Firefox OS</a><span style="line-height: 1.5;">的底層系統,包含基於</span><a class="external" href="http://source.android.com/" style="line-height: 1.5;">Android Open Source Project</a><span style="line-height: 1.5;"> (AOSP)</span><span style="line-height: 1.5;">的Linux核心以及硬體抽象層(hardware abstraction layer, HAL)。本文旨在說明Gonk的組成,更多有關FireFox OS架構以及Gonk是如何配置在其中的細節,請參考</span><a href="/en-US/Firefox_OS/Platform/Architecture" style="line-height: 1.5;">Firefox OS架構</a><span style="line-height: 1.5;">指南。</span></p> +</div> +<h2 id="Gonk_概觀">Gonk 概觀</h2> +<p>在Gecko原始碼中,有一個b2g/資料夾,這個資料夾含有Gonk接口,它為網頁開啟了行動裝置的硬體能力。這其中包含了Linux核心、HAL和其他OEM特定的函式庫(library)。好機個Gonk函式庫是開放原始碼專案,如libusb, bluez等,有些HAL部分則是和Android專案共享,如GPS, camera等。</p> +<p>Gonk是裝置接口層,介於硬體和Gecko之間的配接器。Gonk是一個相對簡單的Linux發布版本,可以視為<a href="/en-US/docs/Gecko" style="line-height: 1.5;">Gecko</a><span style="line-height: 1.5;">的配接目標,就像是Gecko和OS X, Windows和Android的接口。</span></p> +<div class="note"> + <p><strong>Note</strong>: 由於不同的行動裝置有不同的晶片組與硬體規格,所以可能會有不同的Gonk發布版本。</p> +</div> +<p>Firefox OS專案擁有Gonk百分之百的控制權,所以能夠提供Gecko那些原本在其他作業系統上無法看到的介面,例如,Gecko可以直接存取電話系統框架和Gonk的顯示frame buffer。</p> +<h2 id="Gonk_原始碼">Gonk 原始碼</h2> +<p><a href="https://github.com/mozilla-b2g/B2G">B2G repo on Github</a> 上有多種裝置的官方Gonk支援移植,可以視為Gonk的檔案庫。至於裝置支援列表,請見B2G/config.sh。</p> +<p>大部分Gonk相關的日常工作包括了移植Gonk到不同硬體上,還有確保Gecko能在不同硬體上順利運行。</p> +<dl> +</dl> +<p> </p> diff --git a/files/zh-tw/archive/b2g_os/platform/index.html b/files/zh-tw/archive/b2g_os/platform/index.html new file mode 100644 index 0000000000..fe9474eed5 --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/index.html @@ -0,0 +1,75 @@ +--- +title: Firefox OS 平台 +slug: Archive/B2G_OS/Platform +translation_of: Archive/B2G_OS/Platform +--- +<p><span class="seoSummary">Firefox OS 平台是由多樣的元件所組成。如果你只是要撰寫能在 Firefox OS 上執行的 App,其實不太需要通盤了解其架構。但如果你從事平台開發、平台移植,甚或只是單純好奇的話,也許會對以下說明文件感興趣。</span></p> + +<table class="topicpage-table"> + <tbody> + <tr> + <td> + <h2 class="Documentation" id="Documentation" name="Documentation">關於 Firefox OS 平台的說明文件</h2> + + <dl> + <dt><a href="/en-US/docs/Mozilla/Firefox_OS/Introduction" title="en-US/docs/Mozilla/Firefox_OS/Introduction">Firefox OS 架構概述</a></dt> + <dd>簡單概述 Firefox OS 的內部架構,可供平台開發或移植工程師初步了解 Firefox OS。</dd> + <dt> </dt> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Platform/Apps_architecture" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Apps_architecture">Firefox OS 的 A</a><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Platform/Apps_architecture" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Apps_architecture">pp 架構</a></dt> + <dd>概述 Firefox OS 的 App 模型。</dd> + <dt><a href="/en-US/docs/Mozilla/Firefox_OS/Gaia" title="/en-US/docs/Mozilla/Gaia">Gaia</a></dt> + <dd>Gaia 是 Firefox OS 裝置的使用者介面 (UI) App,也是在 Firefox OS 軟體堆疊上執行的 Web App。</dd> + <dt><a href="/en-US/docs/Mozilla/Firefox_OS/Gonk" title="/en-US/docs/Mozilla/Firefox_OS/Gonk">Gonk</a></dt> + <dd>Gonk 的說明文件。Gonk 屬於 Gaia 之下的作業系統層,包含 Linux kernel 硬體抽象層 (Hardware abstraction layer),且由 Gecko 負責之間的溝通。</dd> + <dt><a href="/en-US/docs/Gecko" title="/en-US/docs/Gecko">Gecko</a></dt> + <dd>Gecko 即為 Firefox、Thunderbird,以及其他許多 App 所使用的相同 Open Web 標準實作。</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Security" title="/en-US/docs/Mozilla/Firefox_OS/Security">安全性</a></dt> + <dd>Firefox OS 的安全性說明文件,包含各個面相的裝置安全,適合 App 開發者、裝置整合商等參考。</dd> + <dt><a href="https://developer.mozilla.org/en-US/Firefox_OS/Debugging/Out_of_memory_management_on_Firefox_OS">Firefox OS 記憶體耗盡時的管理作業</a></dt> + <dd>本文將解釋 Firefox OS 記憶體不足時的管理方式,可透過記憶體清理與記憶體不足通知等功能。</dd> + <dt><a href="/en-US/docs/Mozilla/Firefox_OS/Platform/Feature_support_chart" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Feature_support_chart">功能支援表</a></dt> + <dd>各個 Firefox OS 版本所支援的各項功能特色。</dd> + <dt><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Platform/Settings_list" title="/en-US/docs/Mozilla/Firefox_OS/Platform/Settings_list">Firefox OS 設定清單</a></dt> + <dd>常見的設定名稱清單,可搭配 <a href="https://developer.mozilla.org/en-US/docs/WebAPI/Settings" title="/en-US/docs/WebAPI/Settings">Settings</a> API。</dd> + </dl> + + <p><span class="alllinks"><a href="/en-US/docs/tag/B2G" title="/en-US/docs/tag/B2G">全部文章...</a></span></p> + </td> + <td> + <h2 class="Community" id="Community" name="Community">尋求社群協助</h2> + + <p>如果你正在開發 Firefox OS,或是可於 Firefox OS 裝置上執行的 App,則能參閱以下社群資源!</p> + + <ul> + <li>Boot to Gecko 論壇:{{ DiscussionList("dev-b2g", "mozilla.dev.b2g") }}</li> + </ul> + + <ul> + <li>在「Boot to Gecko」的 IRC 頻道上提問:<a class="link-irc" href="irc://irc.mozilla.org/b2g" title="irc://irc.mozilla.org/b2g">#b2g</a></li> + </ul> + + <p><span class="alllinks"><a class="external" href="http://www.catb.org/~esr/faqs/smart-questions.html" title="http://www.catb.org/~esr/faqs/smart-questions.html">請遵守網路禮節...</a></span></p> + + + <h2 class="Related_Topics" id="Related_Topics" name="Related_Topics">相關主題</h2> + + <ul> + <li><a href="/en-US/docs/Mobile" title="en-US/docs/Mobile">Mobile</a></li> + <li><a href="/en-US/docs/HTML" title="en-US/docs/HTML">HTML</a></li> + <li><a href="/en-US/docs/CSS" title="en-US/docs/CSS">CSS</a></li> + <li><a href="/en-US/docs/JavaScript" title="en-US/docs/JavaScript">JavaScript</a></li> + </ul> + + <h2 class="Tools" id="相關資源">相關資源</h2> + + <ul> + <li><a class="link-https" href="https://wiki.mozilla.org/B2G/FAQ" title="B2G/FAQ">Mozilla wiki FAQ</a></li> + <li><a class="link-https" href="https://wiki.mozilla.org/B2G/Schedule_Roadmap" title="https://wiki.mozilla.org/B2G/Schedule_Roadmap">版本進程</a></li> + <li><a href="/en-US/docs/Mozilla/Firefox_OS/Feature_support_chart" title="/en-US/docs/Mozilla/Firefox_OS/Feature_support_chart">支援功能表</a></li> + </ul> + </td> + </tr> + </tbody> +</table> + +<p> </p> diff --git a/files/zh-tw/archive/b2g_os/platform/out_of_memory_management_on_firefox_os/index.html b/files/zh-tw/archive/b2g_os/platform/out_of_memory_management_on_firefox_os/index.html new file mode 100644 index 0000000000..5b7f2045cc --- /dev/null +++ b/files/zh-tw/archive/b2g_os/platform/out_of_memory_management_on_firefox_os/index.html @@ -0,0 +1,53 @@ +--- +title: Firefox OS 記憶體管理 +slug: Archive/B2G_OS/Platform/Out_of_memory_management_on_Firefox_OS +translation_of: Archive/B2G_OS/Platform/Out_of_memory_management_on_Firefox_OS +--- +<div class="summary"> + <p><span class="seoSummary">Firefox OS 會運行在一些記憶體容量不大的裝置上,當程序用盡了記憶體,系統核心就必須關閉其他程序好釋放出記憶體使用。本文旨在描述記憶體關閉和記憶體不足通知如何運作、如何控制關閉那些程序,以確保當記憶體不夠時,主系統還是可以運作。</span></p> +</div> +<p>記憶體不足時會有兩個系統介入管理: <strong>Low memory killer (LMK)</strong> 與<strong> Low memory notifications</strong>.</p> +<h2 id="Low_memory_killer">Low memory killer</h2> +<p><a href="https://android.googlesource.com/kernel/common.git/+/edd540ea92954f896bfb7ee0ebf5dfdde6e6cb41/drivers/staging/android/lowmemorykiller.txt">LMK</a> 是 Android 核心的次系統,這個次系統負責關閉程序好騰出記憶體使用。為了決定程序關閉優先順序,每一個程序都會透過 <a href="https://www.kernel.org/doc/Documentation/filesystems/proc.txt">/proc/<pid>/oom_adj or /proc/<pid>/oom_score_adj files</a> 被賦予一個優先值,這個優先值為調整分數(adjustment score 或 <code>oom_adj</code>)。</p> +<p>一般來說 oom_adj 值越大,程序越容易被刪除,LMK 提供多個層級,每個層級對應到一定容量的可用記憶體以及最小 oom_adj 值。當可用記憶體掉到某一個層級,所有 oom_adj 值大於該層級 oom_adj 值的程序都有可能被關閉,LMK 會從占用最多記憶體的程序開始一個一個關閉,直到可用記憶體回復到安全層級為止。</p> +<div class="note"> + <p><strong>Note</strong>: 被 LMK 關閉的背景 app 仍然以 "殭屍 app" 的形式存在在程序管理員 (task manager),下次再回到該 app,app 會被重新喚醒。目前最大殭屍 app 的數量是 10。</p> +</div> +<div class="note"> + <p><strong>Note</strong>: 為了記憶體不足被關閉的 app 不一定就是造成記憶體不足的原因。</p> +</div> +<h3 id="程序關閉優先順序">程序關閉優先順序</h3> +<p>Firefox OS 關閉 app 的優先順序是由每個 app 給定的優先層級和相關聯的 OOM 調整分數所決定 (<a href="http://hg.mozilla.org/mozilla-central/file/545c35907eff/b2g/app/b2g.js#l661">現有值都存在 pref</a>):</p> +<ol> + <li>最先關閉的 app 是背景 app,最近最少使用的。</li> + <li>第二是 homescreen app。</li> + <li>接下來是使用者可察覺的背景 app (例如,在背景撥放音樂的程式,或高優先 (high-priority)、或持有 cpu wakelock 並且註冊有系統訊息處理器(system messages handler) 的 app)。</li> + <li>第四是鍵盤程式。</li> + <li>前景 (Foreground) app 則是第五順位被關閉的 app。</li> + <li>最後則是前景高優先 (high-priority)、或持有 cpu wakelock 的前景 app。</li> +</ol> +<div class="note"> + <p><strong>Note</strong>: 大部分在前景的子程序持有為 2 的oom_adj,背景子程序則持有 3 ~ 6 的 oom_adj,背景子程序到底會持有多大 oom_adj 值取決於許多因素,比如說是否撥放音月或是否屬於 homescreen app。</p> +</div> +<p>下面是例外:</p> +<ul> + <li>主程序永遠不會被關閉,因為一旦主程序被關閉,所有子程序也會被關閉,系統會重新啟動;主程序的 oom_adj 為 0。</li> + <li>為了加速新程序啟動,會有一個 <strong>preallocated process</strong> 被一直保留著,這個程序耗費的記憶體相當少,但卻可以顯著加速程式啟動。除非所有能關閉的程序都關閉了,但主程序需要的記憶體依然不足,這時 preallocated process 才會被關閉。</li> +</ul> +<h2 id="記憶體過低通知">記憶體過低通知</h2> +<p>第二個釋放記憶體的機制是記憶體過低通知。當可用記憶體量低過一定的<a href="https://www.codeaurora.org/cgit/quic/la//kernel/msm/commit/?id=b3f986cba580b14438b77b42070ebbc77b69d4c4">門檻值</a>,LMK 便會向使用者空間 (userspace) 發出記憶體過低通知,系統 app 和一般使用者 app 都會等待這個通知,然後透過觀察器服務 (observer service) 發出 <code>memory-pressure 事件回應之;這個事件</code> app 不會直接看見,只有 C++ 和 Chrome JS 程式碼會看到,在 Gecko 裡我們從這個事件中會盡一切可能釋放記憶體 — 通常是刪除內部快取 (images, DNS, sqlite, 等等),拋棄可以回復的物件 (比如 WebGL contexts) 還有執行垃圾回收機制。<br> + <br> + 當碰到記憶體過低狀況時,第一個發出的 <code>memory-pressure</code> 事件會有 <code>low-memory</code> <code>負載,倘若經過預定的5秒後我們依然處於記憶體過低狀態,另一個 <code>memory-pressure</code> 事件會發出,不過這一次是帶著</code> <code>low-memory-ongoing</code> 負載,這個時候我們持續處於記憶體過低狀態,很明顯地像一些垃圾回收機制等大動作的作法也不夠了,所以其他一些更低階的記憶體釋放作法會被採行。</p> +<h2 id="LMK_和記憶體過低通知如何協同運作">LMK 和記憶體過低通知如何協同運作</h2> +<p>目前<a href="http://hg.mozilla.org/mozilla-central/file/545c35907eff/b2g/app/b2g.js#l722">記憶體過低門檻介於 LMK 的背景 app 層級(大於)和 homescreen 層級(小於)之間</a>,所以整體記憶體不足的反應機制如下:</p> +<ol> + <li>關閉最近最不常用的背景 app。</li> + <li>當記憶體依然不足,發出 <code>memory-pressure</code> 事件通知給所有的 app。</li> + <li>當記憶體依然不足,每5秒發出 <code>memory-pressure</code> 事件,但標記為 ongoing 讓垃圾回收機制不要回應。</li> + <li>關閉 homescreen.</li> + <li>關閉使用者可察覺或高優先值的背景 app。</li> + <li>關閉運作中的鍵盤 app。</li> + <li>關閉前景 app。</li> + <li>關閉高優先值的前景 app。</li> + <li>關閉 preallocated 程序。</li> +</ol> |