<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之旅 廣告
                DeviceStorageManagerService(簡稱DSMS,下同)是用來監測系統內部存儲空間的狀態的,添加該服務的代碼如下: ~~~ //DSMS的服務名為“devicestoragemonitor “ ServiceManager.addService(DeviceStorageMonitorService.SERVICE, newDeviceStorageMonitorService(context)); ~~~ DSMS的構造函數的代碼如下: **DeviceStorageManagerService.java** ~~~ public DeviceStorageMonitorService(Contextcontext) { mLastReportedFreeMemTime = 0; mContext = context; mContentResolver = mContext.getContentResolver(); mDataFileStats = new StatFs(DATA_PATH);//獲取data分區的信息 mSystemFileStats = new StatFs(SYSTEM_PATH);// 獲取system分區的信息 mCacheFileStats = new StatFs(CACHE_PATH);// 獲取cache分區的信息 //獲得data分區的總大小 mTotalMemory = ((long)mDataFileStats.getBlockCount() * mDataFileStats.getBlockSize())/100L; /* 創建三個Intent,分別用于通知存儲空間不足、存儲空間恢復正常和存儲空間滿。 由于設置了REGISTERED_ONLY_BEFORE_BOOT標志,這3個Intent廣播只能由 系統服務接收 */ mStorageLowIntent = newIntent(Intent.ACTION_DEVICE_STORAGE_LOW); mStorageLowIntent.addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mStorageOkIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_OK); mStorageOkIntent.addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mStorageFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_FULL); mStorageFullIntent.addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mStorageNotFullIntent = new Intent(Intent.ACTION_DEVICE_STORAGE_NOT_FULL); mStorageNotFullIntent.addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); //查詢Settings數據庫中sys_storage_threshold_percentage的值,默認是10, //即當/data空間只剩下10%的時候,,認為空間不足 mMemLowThreshold = getMemThreshold(); //查詢Settings數據庫中的sys_storage_full_threshold_bytes的值,默認是1MB, //即當data分區只剩1MB時,就認為空間已滿,剩下的這1MB空間保留給系統自用 mMemFullThreshold = getMemFullThreshold(); //檢查內存 checkMemory(true); } ~~~ 再來看checkMemory函數,代碼如下: ~~~ private final void checkMemory(boolean checkCache){ if(mClearingCache) { ......//如果正在清理空間,則不作處理 } else{ restatDataDir();//重新計算三個分區的剩余空間大小 //如果剩余空間低于mMemLowThreshold,那么先清理一次空間 clearCache(); //如果空間仍不足,則發送廣播,并在狀態欄上設置一個警告通知 sendNotification(); ...... //如果空間已滿,則調用下面這個函數,以發送一次存儲已滿的廣播 sendFullNotification(); } ...... //DEFAULT_CHECK_INTERVAL為1分鐘,即每一分鐘會觸發一次檢查,似乎有點短 postCheckMemoryMsg(true, DEFAULT_CHECK_INTERVAL); } ~~~ 當空間不足時,DSMS會先嘗試clearCache函數,該函數內部會與PackageManagerService交互,其代碼如下: **DeviceStorageManagerService.java** ~~~ private final void clearCache() { if(mClearCacheObserver == null) { //創建一個CachePackageDataObserver對象,當PKM清理完空間時會回調該對象的 //onRemoveCompleted函數 mClearCacheObserver = new CachePackageDataObserver(); } mClearingCache= true;//設置mClearingCache的值為true,表示我們正在清理空間 try { //調用PKM的freeStorageAndNotify函數以清理空間,這個函數在分析PKM時再介紹 IPackageManager.Stub.asInterface( ServiceManager.getService("package")). freeStorageAndNotify(mMemLowThreshold,mClearCacheObserver); } ...... } ~~~ CachePackageDataObserver是DSMS定義的內部類,其onRemoveCompleted函數很簡單,就是重新發送消息,讓DSMS再檢測一次內存空間。 DeviceStorageManagerService的功能單一,沒有重載dump函數。而DiskStatsService唯一有用的就是dump功能了。不知Google的工程師為什么沒有把DeviceStorageManagerService和DiskStatsService的功能整合到一起。
                  <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>

                              哎呀哎呀视频在线观看