我刚刚发现,在使用systrace工具时,使用Trace.beginSection可以帮助解决性能问题。该文件陈述";该跟踪机制独立于Debug#startMethodTracing"提供的方法跟踪机制;
但就像调试日志一样,在发布应用程序之前,我们是否需要注释/删除Trace API。还是允许/良性地在发布代码中保留Trace API调用?
准备发布清单并没有提到任何关于跟踪API的内容。
但我很怀疑,因为还有其他方法,比如Trace.setCounter,可以用来记录调试信息。
通常我在完成跟踪后会删除它们,但谷歌会将其保留在一些最基本的构建块中,如RecyclerView
,所以这可能没问题。
以下是RecyclerView
来源的一个示例:
// androidx.recyclerview.widget.RecyclerView
void consumePendingUpdateOperations() {
if (!mFirstLayoutComplete || mDataSetHasChangedAfterLayout) {
TraceCompat.beginSection(TRACE_ON_DATA_SET_CHANGE_LAYOUT_TAG);
dispatchLayout();
TraceCompat.endSection();
return;
}
if (!mAdapterHelper.hasPendingUpdates()) {
return;
}
// if it is only an item change (no add-remove-notifyDataSetChanged) we can check if any
// of the visible items is affected and if not, just ignore the change.
if (mAdapterHelper.hasAnyUpdateTypes(AdapterHelper.UpdateOp.UPDATE) && !mAdapterHelper
.hasAnyUpdateTypes(AdapterHelper.UpdateOp.ADD | AdapterHelper.UpdateOp.REMOVE
| AdapterHelper.UpdateOp.MOVE)) {
TraceCompat.beginSection(TRACE_HANDLE_ADAPTER_UPDATES_TAG);
startInterceptRequestLayout();
onEnterLayoutOrScroll();
mAdapterHelper.preProcess();
if (!mLayoutWasDefered) {
if (hasUpdatedView()) {
dispatchLayout();
} else {
// no need to layout, clean state
mAdapterHelper.consumePostponedUpdates();
}
}
stopInterceptRequestLayout(true);
onExitLayoutOrScroll();
TraceCompat.endSection();
} else if (mAdapterHelper.hasPendingUpdates()) {
TraceCompat.beginSection(TRACE_ON_DATA_SET_CHANGE_LAYOUT_TAG);
dispatchLayout();
TraceCompat.endSection();
}
}
可以保留它们,但不要留下任何机密信息,因为任何分析应用程序的人都会看到这些信息。