日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发这么久你竟然还不知道Dropbox?

發布時間:2023/12/20 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发这么久你竟然还不知道Dropbox? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Android?DropBox 是 Android 用來持續化存儲系統數據的一個管理類,主要用于記錄 Android 運行過程中, 內核, 系統進程, 用戶進程等出現嚴重問題時的 log, 可以認為這是一個可持續存儲的系統級別的 logcat。

本文主要從以下幾個方面闡述Android?Dropbox。

1.什么是Android?Dropbox

Android Dropbox 是 Android 在 Froyo(API level 8) 引入的用來持續化存儲系統數據的機制。主要用于記錄 Android 運行過程中, 內核, 系統進程, 用戶進程等出現嚴重問題時的 log, 可以認為這是一個可持續存儲的系統級別的 logcat。

相關文件記錄存儲目錄:/data/system/dropbox

2.Dropbox源碼

主要源碼(基于N版本代碼:http://androidxref.com/7.0.0_r1/):

/frameworks/base/core/java/android/os/DropBoxManager.java

/frameworks/base/services/core/java/com/android/server/DropBoxManagerService.java

接下來對源碼進行初步分析。(備注:因為篇幅原因,源碼中...是我省略無關代碼)

a.Dropbox的啟動流程

作為android系統服務,其啟動方式和其他android服務基本一致。

系統啟動過程中SystemServer.java中的startOtherServices()方法中啟動 private void startOtherServices() {... mSystemServiceManager.startService(DropBoxManagerService.class);...}

DropBoxManagerService的構造函數:

public DropBoxManagerService(final Context context) { this(context, new File("/data/system/dropbox"));}

可以看出dropbox文件存儲的目錄是:/data/system/dropbox

再就是需要關注DropBoxManagerService中add和dump方法:

private final IDropBoxManagerService.Stub mStub = new IDropBoxManagerService.Stub() { @Override public void add(DropBoxManager.Entry entry) { DropBoxManagerService.this.add(entry); } ... @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { DropBoxManagerService.this.dump(fd, pw, args); } };

DropBoxManager進程通訊時寫數據都是通過這個add方法將數據寫入到存儲目錄,通過dump來采集記錄數據的。

這里重點提下add方法:

public void add(DropBoxManager.Entry entry) { ...? final Intent dropboxIntent = new Intent(DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED); dropboxIntent.putExtra(DropBoxManager.EXTRA_TAG, tag); dropboxIntent.putExtra(DropBoxManager.EXTRA_TIME, time); if (!mBooted) { dropboxIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); } // Call sendBroadcast after returning from this call to avoid deadlock. In particular // the caller may be holding the WindowManagerService lock but sendBroadcast requires a // lock in ActivityManagerService. ActivityManagerService has been caught holding that // very lock while waiting for the WindowManagerService lock. mHandler.sendMessage(mHandler.obtainMessage(MSG_SEND_BROADCAST, dropboxIntent)); ...}

可以發現:在dropbox在日志存儲時會發送系統廣播:

DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED

所以我們可以針對這個做一些系統定制,如獲取dropbox中的日志以確認相關問題。

另外,DropBoxManagerService中數據dump和add的一些控制數據需了解下:

private static final int DEFAULT_AGE_SECONDS = 3 * 86400;private static final int DEFAULT_MAX_FILES = 1000;private static final int DEFAULT_QUOTA_KB = 5 * 1024;private static final int DEFAULT_QUOTA_PERCENT = 10;private static final int DEFAULT_RESERVE_PERCENT = 10;private static final int QUOTA_RESCAN_MILLIS = 5000;

DEFAULT_AGE_SECONDS = 3 * 86400:文件最長可存活時長為3天?

DEFAULT_MAX_FILES = 1000:最大dropbox文件個數為1000?

DEFAULT_QUOTA_KB = 5 * 1024:分配dropbox空間的最大值5M

DEFAULT_QUOTA_PERCENT = 10:是指dropbox目錄最多可占用空間比例10%?

DEFAULT_RESERVE_PERCENT = 10:是指dropbox不可使用的存儲空間比例10%?

QUOTA_RESCAN_MILLIS = 5000:重新掃描retrim時長為5s

上面這些都是默認值,完全可以通過設置content://settings/global數據庫對應項來修改。

DropBoxManager是可以供其系統服務直接調用的類。

final DropBoxManager dbox = (DropBoxManager)mContext.getSystemService(Context.DROPBOX_SERVICE);

例如,拿ActivityManagerService中,設備應用出現crash時,報錯信息棧就會記錄到dropbox目錄,下面詳細介紹下應用出現crash后日志記錄到dropbox的過程。

首先:應用在crash后,ActivityManagerService會處理對應的消息:

HANDLE_APPLICATION_CRASH_TRANSACTION

case HANDLE_APPLICATION_CRASH_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder app = data.readStrongBinder(); ApplicationErrorReport.CrashInfo ci = new ApplicationErrorReport.CrashInfo(data); handleApplicationCrash(app, ci); reply.writeNoException(); return true; }

handleApplicationCrash實現了處理appcrash的流程:

可以看到?addErrorToDropBox方法:

public void addErrorToDropBox(String eventType, ProcessRecord process, String processName, ActivityRecord activity, ActivityRecord parent, String subject, final String report, final File dataFile, final ApplicationErrorReport.CrashInfo crashInfo) { ... dbox.addText(dropboxTag, sb.toString()); ...}

代碼:dbox.addText(dropboxTag, sb.toString()); 就是調用的DropBoxManager中的addText方法

public void addText(String tag, String data) { try { mService.add(new Entry(tag, 0, data)); } catch (RemoteException e) { if (e instanceof TransactionTooLargeException && mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N) { Log.e(TAG, "App sent too much data, so it was ignored", e); return; } throw e.rethrowFromSystemServer(); }}

addText實際是調用DropBoxManagerService中add方法最終將crash的trace信息寫入dropbox目錄。

3.dropbox中記錄的文件有哪些呢?

下圖是項目中從dropbox目錄pull出來的一個目錄截圖:

可以看到每個文件格式命名都是:processClass _ eventType@時間戳[.txt|txt.gz].

processClass列舉:system_server, system_app, data_app;?

eventType列舉:分為crash anr watchdog wtf strict_mode lowmem

netstats_error Kernel Panic SYSTEM_BOOT SYSTEM_RESTART?

BATTERY_DISCHARGE_INFO SYSTEM_TOMBSTONE;

其中@前面部分及dropbox寫入的tag。

如列舉部分tag含義:?

system_app_anr:系統app無響應?

system_app_crash:系統app進程崩潰?

system_server_native_crash system進程native出現崩潰?

system_server_wtf:system進程發生嚴重錯誤?

system_server_lowmem:system進程內存不足?

?

4.如何利用DropboxManager

a.利用 DropBoxManager 來記錄需要相對持久化存儲的錯誤日志信息

優點:自動抓錯, 避免人為因素而產生的錯誤遺漏

b.錯誤自動上報

可以利用dropbox每生成新的記錄, Dropbox 就會發送廣播:

DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED

app可以接收監聽改廣播獲取指定的數據文件內容,內容發送到指定的服務器或郵箱完成錯誤自動上報。

利用前提:app要具有系統權限??因為:DropBoxManager.ACTION_DROPBOX_ENTRY_ADDED是保護性廣播,且讀取系統日志也需要android.Manifest.permission.READ_LOGS權限

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

?

總結

以上是生活随笔為你收集整理的Android开发这么久你竟然还不知道Dropbox?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色吧av色av | 操色网 | 懂色av懂色av粉嫩av分享吧 | 香蕉av在线播放 | 亚洲一区二区三区免费视频 | 欧美激情视频网 | 岛国精品一区二区 | 亚洲视频一区二区三区在线观看 | h网址在线观看 | 日本69av| 天天拍夜夜拍 | 97精品国产97久久久久久粉红 | 男人久久久 | 变态另类ts人妖一区二区 | 麻豆免费观看视频 | 亚洲色图欧美视频 | 国产女优在线播放 | 中文字幕第一页亚洲 | 国产精品久久久久久99 | 欧美色图11p | 色玖玖综合 | 日本变态折磨凌虐bdsm在线 | 奇米影视播放器 | 国产综合色视频 | 亚洲人成无码www久久久 | 国产免费av在线 | 日韩偷拍一区 | 欧美午夜性生活 | 一个人在线观看免费视频www | 亚洲精品成a人在线观看 | 国产黑丝在线播放 | 国产欧美一区二区精品久久久 | 亚洲视频免费观看 | av影库| 欧美少妇精品 | 欧美揉bbbbb揉bbbbb | 一道本久久 | 免费小视频在线观看 | 久久久久亚洲av成人人电影 | 精品三区 | 寡妇高潮一级视频免费看 | 深夜免费在线视频 | 国产精品二区一区二区aⅴ污介绍 | 欧美中文字幕 | 午夜剧场福利社 | 97在线观视频免费观看 | 日韩电影在线观看一区二区 | 麻豆性生活 | 日本激情视频在线观看 | 四季av一区二区夜夜嗨 | 中文字幕一区二区三区夫目前犯 | 欧美激情亚洲激情 | 毛片网站视频 | 又黄又色又爽的视频 | 中文字幕2区 | 亚洲天堂毛片 | 91精品国产色综合久久不卡98口 | 激情综合色 | 69视频国产| av网站久久 | 牛牛影视一区二区三区 | 中文亚洲av片不卡在线观看 | 日本乱子伦 | 涩涩视频网站 | 九九资源网 | 美女啪啪无遮挡 | 国产高潮国产高潮久久久 | 成人三级在线看 | 免费高清毛片 | 丝袜ol美脚秘书在线播放 | 国产精品一区无码 | 日本一区二区三区四区视频 | 最近中文字幕免费 | 亚洲精品久久久久久久久 | 国产精品一二三四五 | 日韩亚洲一区二区三区 | 国产精品一区二区在线看 | 污视频在线观看网站 | 黄色工厂这里只有精品 | 蜜桃臀av在线 | 男女视频在线免费观看 | 国产亚洲一区二区不卡 | 反差在线观看免费版全集完整版 | 欧洲美熟女乱又伦 | 亚洲综合a | 人体一级片 | 亚洲视频欧美 | 一区二区久久 | 曰韩av | 亚洲在线不卡 | 精品欧美一区二区精品少妇 | 亚洲天堂免费在线 | 国产精品综合 | 男生操女生在线观看 | 免费在线毛片 | 欧美亚洲综合网 | 黄色片不卡 | 成人黄色在线观看视频 | 伊人91在线|