Android创建文件为unix格式,Recovery模式下/cache/recovery/目录下创建文件,开机后文件被删除...
在一次需求的實現(xiàn)過程中需要在remcovery模式下,在/cache/recovery/目錄下創(chuàng)建一個日志文件用于記錄相關(guān)的日志信息,以便于在開機后讀取這些日志信息,再根據(jù)日志信息做出相應的處理,但是奇怪的是每當開機完成該文件不被系統(tǒng)自動刪除,而系統(tǒng)中原有的日志文件(如升級log---last_log_r)等卻依然保留,因此在全局中搜索關(guān)鍵字”/cache/recovery/“發(fā)現(xiàn)了這其中的原因。
也就是說系統(tǒng)會在系統(tǒng)啟動完成后刪除/cache/recovery/目錄下不是以”last_"為前綴的文件,那么具體是如何實現(xiàn)的呢,我們一起來看一下。
首先在framework層有一個BootReceiver這樣一個類,用于處理系統(tǒng)啟動完成后的善后工作,例如刪除舊的無關(guān)的日志信息等。
第一步:在framework/base/core/res下的清單文件AndroidManifest.xml中注冊廣播接收器BootReceiver,用于接收系統(tǒng)啟動完成的廣播如下:
android:primaryUserOnly="true">
intent-filter>
receiver>
第二步:當系統(tǒng)啟動完成后,這個廣播接收器會接收到系統(tǒng)啟動完成的廣播之后在onReceive下執(zhí)行l(wèi)ogBootEvents函數(shù),并執(zhí)行RecoverySystem下的handleAftermath()函數(shù),最終刪除在/cache/recovery下不是以last_為前綴的文件。具體函數(shù)如下:
/**
*?Called?after?booting?to?process?and?remove?recovery-related?files.
*?@return?the?log?file?from?recovery,?or?null?if?none?was?found.
*
*?@hide
*/
publicstaticString?handleAftermath()?{
//?Record?the?tail?of?the?LOG_FILE
Log.d(TAG,"Entering?the?handleAftermath?method");
String?log?=?null;
try{
log?=?FileUtils.readTextFile(LOG_FILE,?-LOG_FILE_MAX_LENGTH,?"...\n");
}?catch(FileNotFoundException?e)?{
Log.i(TAG,?"No?recovery?log?file");
}?catch(IOException?e)?{
Log.e(TAG,?"Error?reading?recovery?log",?e);
}
//?Delete?everything?in?RECOVERY_DIR?except?those?beginning
//?with?LAST_PREFIX
String[]?names?=?RECOVERY_DIR.list();
for(inti?=0;?names?!=null&&?i
if(names[i].startsWith(LAST_PREFIX))continue;
File?f?=?newFile(RECOVERY_DIR,?names[i]);
if(!f.delete())?{
Log.e(TAG,?"Can't?delete:?"+?f);
}?else{
Log.i(TAG,?"Deleted:?"+?f);
}
}
returnlog;
}
注:如果我們需要在/cache/recovery/目錄下保存文件,我們可以以"last_"為前綴進行命名也可以在RecoverySystem中修改相關(guān)的邏輯。
總結(jié)
以上是生活随笔為你收集整理的Android创建文件为unix格式,Recovery模式下/cache/recovery/目录下创建文件,开机后文件被删除...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android找工作 2019,2019
- 下一篇: android studio gradl