این صفحه نحوه ثبت ردیابی سیستم با استفاده از API ProfilingManager را نشان میدهد.
وابستگیها را اضافه کنید
برای بهترین تجربه با API ProfilingManager ، کتابخانههای Jetpack زیر را به فایل build.gradle.kts خود اضافه کنید.
کاتلین
dependencies { implementation("androidx.tracing:tracing:1.3.0") implementation("androidx.core:core:1.17.0") }
گرووی
dependencies { implementation 'androidx.tracing:tracing:1.3.0' implementation 'androidx.core:core:1.17.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 به جلوگیری از خطاهای عدم پاسخگویی برنامه (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()اضافه شده است. این برش سفارشی در پروفایل تولید شده ظاهر میشود و عملیات خاص را در برنامه شما برجسته میکند.