乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android 之 SystemService

       老匹夫 2013-12-25
      分類: Android 2011-07-13 13:48 3161人閱讀 評論(0) 收藏 舉報(bào)

      SystemServer是Android系統(tǒng)的一個(gè)核心進(jìn)程,它是由zygote進(jìn)程創(chuàng)建的,因此在android的啟動(dòng)過程中位于zygote之后。android的所有服務(wù)循環(huán)都是建立在 SystemServer之上的。在SystemServer中,將可以看到它建立了android中的大部分服務(wù),并通過ServerManager的add_service方法把這些服務(wù)加入到了ServiceManager的svclist中。從而完成ServcieManager對服務(wù)的管理。

      先看下SystemServer的main函數(shù):

      1. native public static void init1(String[]args);  
      2. public static void main(String[] args) {  
      3.        if(SamplingProfilerIntegration.isEnabled()) {  
      4.           SamplingProfilerIntegration.start();  
      5.            timer = new Timer();  
      6.            timer.schedule(new TimerTask() {  
      7.                @Override  
      8.                public void run() {  
      9.                   SamplingProfilerIntegration.writeSnapshot("system_server");  
      10.                }  
      11.            }, SNAPSHOT_INTERVAL,SNAPSHOT_INTERVAL);  
      12.        }  
      13.        // The system server has to run all ofthe time, so it needs to be   
      14.        // as efficient as possible with itsmemory usage.   
      15.       VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);  
      16.       System.loadLibrary("android_servers"); //加載本地庫android_servers   
      17.        init1(args);  
      18.    }  

      在main函數(shù)中主要是調(diào)用了本地方法init1(args), 他的實(shí)現(xiàn)位于../base/services/jni/com_android_server_SystemService.cpp中

      1. static voidandroid_server_SystemServer_init1(JNIEnv* env, jobject clazz)  
      2. {  
      3.     system_init();  
      4. }  

         進(jìn)一步來看system_init,在這里面看到了閉合循環(huán)管理框架:

      1. runtime->callStatic("com/android/server/SystemServer","init2");//回調(diào)了SystemServer.java中的init2方法   
      2.     if (proc->supportsProcesses()) {  
      3.         LOGI("System server: enteringthread pool.\n");  
      4.        ProcessState::self()->startThreadPool();  
      5.        IPCThreadState::self()->joinThreadPool();  
      6.         LOGI("System server: exitingthread pool.\n");  
      7.     }  

      通過調(diào)用com/android/server/SystemServer.java中的init2方法完成service的注冊。在init2方法中主要建立了以ServerThread線程,然后啟動(dòng)線程來完成service的注冊。

      1. public static final void init2() {  
      2.     Slog.i(TAG, "Entered the Androidsystem server!");  
      3.     Thread thr = new ServerThread();  
      4.    thr.setName("android.server.ServerThread");  
      5.     thr.start();  
      6. }  

      具體實(shí)現(xiàn)service的注冊在ServerThread的run方法中:

      1.  try {  
      2.             Slog.i(TAG, "EntropyService");  
      3.            ServiceManager.addService("entropy"new EntropyService());  
      4.             Slog.i(TAG, "PowerManager");  
      5.             power = new PowerManagerService();  
      6.            ServiceManager.addService(Context.POWER_SERVICE, power);  
      7.             Slog.i(TAG, "ActivityManager");  
      8.             context =ActivityManagerService.main(factoryTest);  
      9.             Slog.i(TAG, "TelephonyRegistry");  
      10.            ServiceManager.addService("telephony.registry", newTelephonyRegistry(context));  
      11.   
      12. }  


        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多