<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                前面提到,Android系統的硬件訪問服務通常是在系統進程System中啟動的,而系統進程System是由應用程序孵化器進程Zygote1負責啟動的。由于應用程序孵化器進程Zygote是在系統啟動時啟動的,因此,把硬件訪問服務運行在系統進程System中,就實現了開機時自動啟動。 在本節中,我們把硬件訪問服務FregService運行在系統進程System中,因此,進入到frameworks/base/services/java/com/android/server目錄中,打開里面的SystemServer.java文件,修改ServerThread類的成員函數run的實現,如下所示。 ~~~ class ServerThread extends Thread { ...... @Override public void run() { ...... if (factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) { ...... try { Slog.i(TAG, "Freg Service"); ServiceManager.addService("freg", new FregService()); } catch (Throwable e) { Slog.e(TAG, "Failure starting Freg Service", e); } } ...... } ...... } ~~~ 系統進程System在啟動時,會創建一個ServerThread線程來啟動系統中的關鍵服務,其中就包括一些硬件訪問服務。在ServerThread類的成員函數run中,首先創建一個FregService實例,然后把它注冊到Service Manager中。Service Manager是Android系統的Binder進程間通信機制的一個重要角色,它負責管理系統中的服務對象。注冊到Service Manager中的服務對象都有一個對應的名稱,使用這些服務的Client進程就是通過這些名稱來向Service Manager請求它們的Binder代理對象接口的,以便可以訪問它們所提供的服務。硬件訪問服務FregService注冊到Service Manager之后,它的啟動過程就完成了。 最后,我們需要執行mmm命令來重新編譯services模塊。 ~~~ USER@MACHINE:~/Android$ mmm ./frameworks/base/services/java/ ~~~ 編譯后得到的services.jar文件就包含有硬件訪問服務FregService,并且在系統啟動時,將它運行在系統進程System中。 至此,硬件訪問服務FregService就完全實現好了。我們可以執行make snod命令來重新打包Android系統鏡像文件system.img。 ~~~ USER@MACHINE:~/Android$ make snod ~~~ 在接下來的2.5小節中,我們將開發一個Android應用程序來訪問虛擬硬件設備freg的寄存器val的值,這是通過調用硬件訪問服務FregService的成員函數setVal和getVal實現的。 > 注: > 1. 第11章將詳細分析應用程序孵化器進程Zygote。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看