این صفحه نحوه ثبت ردیابی سیستم را با استفاده از ProfilingManager
API نشان می دهد.
وابستگی ها را اضافه کنید
برای بهترین تجربه با API ProfilingManager
، کتابخانه های Jetpack زیر را به فایل build.gradle.kts
خود اضافه کنید.
کاتلین
dependencies { implementation("androidx.tracing:tracing:1.3.0") implementation("androidx.core:core:1.16.0") }
شیار
dependencies { implementation 'androidx.tracing:tracing:1.3.0' implementation 'androidx.core:core:1.16.0' }
ردیابی سیستم را ثبت کنید
پس از افزودن وابستگی های مورد نیاز، از کد زیر برای ثبت ردیابی سیستم استفاده کنید. این مثال یک تنظیمات اولیه را در یک Activity
برای شروع و مدیریت یک جلسه پروفایل نشان می دهد.
کاتلین
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) fun sampleRecordSystemTrace() { val mainExecutor: Executor = Dispatchers.IO.asExecutor() // Your choice of executor for the callback to occur on. val resultCallback = Consumer<ProfilingResult> { profilingResult -> if (profilingResult.errorCode == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.resultFilePath ) } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.errorCode + " errormsg=" + profilingResult.errorMessage ) } } val stopSignal = CancellationSignal() val requestBuilder = SystemTraceRequestBuilder() requestBuilder.setCancellationSignal(stopSignal) requestBuilder.setTag("FOO") // Caller supplied tag for identification requestBuilder.setDurationMs(60000) requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER) requestBuilder.setBufferSizeKb(20971520) requestProfiling(applicationContext, requestBuilder.build(), mainExecutor, resultCallback) // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation") heavyOperation() Trace.endSection() // Once the interesting code section is profiled, stop profile stopSignal.cancel() } fun heavyOperation() { // Computations you want to profile }
جاوا
void heavyOperation() { // Computations you want to profile } void sampleRecordSystemTrace() { Executor mainExecutor = Executors.newSingleThreadExecutor(); Consumer<ProfilingResult> resultCallback = new Consumer<ProfilingResult>() { @Override public void accept(ProfilingResult profilingResult) { if (profilingResult.getErrorCode() == ProfilingResult.ERROR_NONE) { Log.d( "ProfileTest", "Received profiling result file=" + profilingResult.getResultFilePath()); } else { Log.e( "ProfileTest", "Profiling failed errorcode=" + profilingResult.getErrorCode() + " errormsg=" + profilingResult.getErrorMessage()); } } }; CancellationSignal stopSignal = new CancellationSignal(); SystemTraceRequestBuilder requestBuilder = new SystemTraceRequestBuilder(); requestBuilder.setCancellationSignal(stopSignal); requestBuilder.setTag("FOO"); requestBuilder.setDurationMs(60000); requestBuilder.setBufferFillPolicy(BufferFillPolicy.RING_BUFFER); requestBuilder.setBufferSizeKb(20971520); Profiling.requestProfiling(getApplicationContext(), requestBuilder.build(), mainExecutor, resultCallback); // Wait some time for profiling to start. Trace.beginSection("MyApp:HeavyOperation"); heavyOperation(); Trace.endSection(); // Once the interesting code section is profiled, stop profile stopSignal.cancel(); }
کد نمونه با انجام مراحل زیر، جلسه پروفایل را تنظیم و مدیریت می کند:
اجرا کننده را تنظیم کنید. برای تعریف رشته ای که نتایج پروفایل را دریافت می کند یک
Executor
ایجاد کنید. نمایه سازی در پس زمینه اتفاق می افتد. اگر بعداً پردازش بیشتری را به پاسخ تماس اضافه کنید، استفاده از یک مجری رشته غیر UI به جلوگیری از خطاهای Application Not Responding (ANR) کمک می کند.نتایج پروفایل را مدیریت کنید. یک شیء
Consumer<ProfilingResult>
ایجاد کنید. سیستم از این شی برای ارسال نتایج پروفایل ازProfilingManager
به برنامه شما استفاده می کند.درخواست پروفایل را بسازید. برای تنظیم جلسه پروفایل خود یک
SystemTraceRequestBuilder
ایجاد کنید. این سازنده به شما امکان می دهد تنظیمات ردیابیProfilingManager
را سفارشی کنید. سفارشی سازی سازنده اختیاری است. اگر این کار را نکنید، سیستم از تنظیمات پیش فرض استفاده می کند.- یک تگ تعریف کنید از
setTag()
برای اضافه کردن یک برچسب به نام ردیابی استفاده کنید. این تگ به شما کمک می کند تا ردیابی را شناسایی کنید. - اختیاری: مدت زمان را تنظیم کنید. از
setDurationMs()
برای تعیین مدت زمان پروفایل در میلی ثانیه استفاده کنید. به عنوان مثال،60000
یک ردیابی 60 ثانیه ای را تعیین می کند. اگرCancellationSignal
قبل از آن فعال نشده باشد، ردیابی به طور خودکار پس از مدت زمان مشخص شده به پایان می رسد. - یک خط مشی بافر را انتخاب کنید. از
setBufferFillPolicy()
برای تعریف نحوه ذخیره داده های ردیابی استفاده کنید.BufferFillPolicy.RING_BUFFER
به این معنی است که وقتی بافر پر است، دادههای جدید قدیمیترین دادهها را بازنویسی میکنند و یک رکورد مداوم از فعالیتهای اخیر نگه میدارند. - اندازه بافر را تنظیم کنید. از
setBufferSizeKb()
برای تعیین اندازه بافر برای ردیابی استفاده کنید که می توانید از آن برای کنترل اندازه فایل ردیابی خروجی استفاده کنید.
- یک تگ تعریف کنید از
اختیاری: چرخه عمر جلسه را مدیریت کنید. یک
CancellationSignal
ایجاد کنید. این شی به شما امکان می دهد هر زمان که بخواهید جلسه پروفایل را متوقف کنید و کنترل دقیقی بر طول آن به شما می دهد.شروع کنید و نتایج را دریافت کنید. هنگامی که
requestProfiling()
فرا میخوانید،ProfilingManager
یک جلسه پروفایل را در پسزمینه شروع میکند. هنگامی که پروفایل انجام شد،ProfilingResult
را به متدresultCallback#accept
شما ارسال میکند. اگر نمایهسازی با موفقیت به پایان برسد،ProfilingResult
مسیری را که ردیابی روی دستگاه شما ذخیره شده است از طریقProfilingResult#getResultFilePath
ارائه میکند. می توانید این فایل را به صورت برنامه نویسی یا برای پروفایل محلی، با اجرایadb pull <trace_path>
از رایانه خود دریافت کنید.نقاط ردیابی سفارشی را اضافه کنید. می توانید نقاط ردیابی سفارشی را در کد برنامه خود اضافه کنید. در مثال کد قبلی، یک قطعه ردیابی به نام
MyApp:HeavyOperation
با استفاده ازTrace.beginSection()
وTrace.endSection()
اضافه شده است. این برش سفارشی در نمایه تولید شده ظاهر می شود و عملیات خاصی را در برنامه شما برجسته می کند.