簡體   English   中英

android traceview異步事件

[英]android traceview asynchronous events

我想使用traceview來衡量幾個異步事件的性能。 異步事件通過類似於以下代碼的回調傳遞給我。

interface EventCallback {

    void onStartEvent(String name);

    void onStopEvent(String name);
}

其中每個異步事件都將以“ onStartEvent”調用開始,並以“ onStopEvent”調用結束。

我想為每個事件創建跟蹤文件。 根據我在此處的閱讀內容( http://developer.android.com/tools/debugging/debugging-tracing.html#creatingtracefiles ),由於必須在“堆棧”中“構造”調用的順序,因此無法跟蹤異步事件像訂購。 因此,對“ Debug.stopMethodTracing()”的調用始終適用於對“ Debug.startMethodTracing(“ calc”);“的最新調用。

因此,如果我按以下順序收到回調。

onStartEvent(A)

onStartEvent(B)

onStopEvent(A)

onStopEvent(B)

這將被解釋為

Debug.startMethodTracing(“ A”);

Debug.startMethodTracing(“ B”);

Debug.stopMethodTracing(); //將應用於“ B”而不是“ A”

Debug.stopMethodTracing(); //將應用於“ A”而不是“ B”

使用traceview,有什么可以做我想要的嗎? 即跟蹤“非結構化”異步事件?

traceview可能是錯誤的工具。 如果您確實想走這條路線,則可以保持“活動事件計數”,並且只要有事件正在處理,就可以保持跟蹤文件處於打開狀態。 這可能會導致多個事件出現在同一個跟蹤文件中,但是您正在跟蹤VM中的方法調用,因此沒有簡單的方法可以解決此問題。

如果事件發生在不同的線程上,則可以通過后處理步驟將它們分開。 這將需要一些努力來解析數據並去除不需要的記錄。 (請參見例如thisthis 。)

您並沒有真正說出自己要衡量的內容。 例如,如果只需要開始/結束時間,則可以將其寫入自己的日志文件中,並跳過所有traceview的樂趣。

根據您的需求, systrace可能更易於使用。 不幸的是,自定義事件類( Trace )僅使同步事件API公開-如果您不介意使用反射來訪問非公共接口,則還可以生成異步事件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM