drawWithCache والأداء
تجنب إعادة بناء كائنات الرسم في كل إطار
drawWithCache والأداء درس مجاني في Jetpack Compose Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Jetpack Compose Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Jetpack Compose Academy 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Drawing Runs Often
Your Canvas lambda can run on every frame. Rebuilding heavy objects there, frame after frame, quietly drags down performance.
The Costly Objects
Things like Path, Brush, and Paint are not free to create. Allocating them on each draw wastes work the GPU never needed.
Enter drawWithCache
The drawWithCache modifier lets you build expensive objects once and reuse them. It splits setup from the actual drawing step.
Modifier.drawWithCache {
// build once here
onDrawBehind { /* draw each frame */ }
}Build Block Runs Rarely
Code in the cache block only re-runs when the size or your read state changes. Put your Path and Brush creation right here.
Modifier.drawWithCache {
val brush = Brush.linearGradient(colors)
onDrawBehind { drawRect(brush) }
}onDrawBehind
Use onDrawBehind to paint underneath the Composable's content. It gives you a DrawScope that runs on each frame, cheaply.
onDrawBehind {
drawCircle(color = Color.Blue)
}onDrawWithContent
Need to mix your art with the actual UI? onDrawWithContent lets you draw, call drawContent, and draw again around it.
onDrawWithContent {
drawContent()
drawRect(color = Color.Black, alpha = 0.2f)
}Cache the Path
A chart Path is a classic win. Build it once in the cache block, then just drawPath it every frame without rebuilding.
val path = Path().apply { /* shape */ }
onDrawBehind { drawPath(path, Color.Green) }React to Size
Inside the cache block you can read size safely. When the canvas resizes, your block re-runs and rebuilds objects to fit.
Avoid State Reads in Draw
Reading state during drawing can trigger extra work. Keep your draw block lean and move setup into the cache block instead.
Measure, Do Not Guess
Before optimizing, profile. The Layout Inspector and frame timings tell you what really stutters, so you fix the right thing.
Reuse Wherever You Can
The golden rule: build heavy objects once and reuse them. drawWithCache makes that pattern easy and your animations buttery smooth.
Quick Check
Where should you create an expensive Brush so it is not rebuilt every frame?
Recap
You learned to keep drawing fast: build heavy objects in the drawWithCache block, draw cheaply in onDrawBehind, and always measure first. Smooth frames! ⚡
الأسئلة الشائعة
هل درس «drawWithCache والأداء» مجاني؟
نعم — نص درس «drawWithCache والأداء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Jetpack Compose Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Jetpack Compose Academy 4 دروس في المجموع.
ماذا ستتعلم في «drawWithCache والأداء»؟
تجنب إعادة بناء كائنات الرسم في كل إطار تتمرن على Jetpack Compose Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Jetpack Compose Academy؟
لا تُشترط خبرة سابقة. Jetpack Compose Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «drawWithCache والأداء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Jetpack Compose Academy هذا؟
نعم. كل درس في Jetpack Compose Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- DrawScope: الخطوط والمستطيلات والدوائر
- المسارات والتدرجات وأنماط المزج
- drawWithCache والأداء
- بناء حلقة تقدم مباشرة