طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 251 · برمجة الأجهزة الذكية
الدرس 25 · الوحدة 12: إدارة استهلاك الطاقة وتحسين الكفاءة

إدارة استهلاك الطاقة: وضع التوفير وقياس التحسّن

ترشيد الاستهلاك وإثبات التحسّن بالأرقام. ⏱ نحو 45 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تعدّد مصادر استهلاك الطاقة وطرق خفضها.
  • تبني وضع توفيرٍ يتبع حالة البطارية.
  • تقيس الخفض وتثبت تجاوز 15%.

١الطاقة موردٌ محدود

كل عمليّةٍ في التطبيق تستهلك بطارية: المستشعرات، الحركات، تحديثات الواجهة، الشبكة. الناتج الرابع للمقرر يطلب خفض الاستهلاك بما لا يقلّ عن 15% مقارنةً بالإصدار الأساسيّ. المبدأ: افعل أقلّ حين لا يلزم الأكثر.

المصدركيف نخفّضه في وضع التوفير
المستشعراتقلّل تردّد القراءة أو أوقف غير الضروريّ
الحركاتعطّلها أو بسّطها
التحديثحدّث أقلّ تكرارًا
السطوع/الألوانثيمٌ داكن أقلّ استهلاكًا

٢وضع التوفير يتبع البطارية

نقرأ battery.saver (أو مستوًى منخفضًا) ونكيّف السلوك. فعّل «توفير» أو اخفض البطارية في اللوحة:

import { View, Text, StyleSheet } from 'react-native';import { useBattery } from 'smartdevice'; export default function App() {  const bat = useBattery();  const eco = bat.saver || bat.level < 20;      // وضع التوفير نشط؟  return (    <View style={[styles.box, eco && styles.ecoBox]}>      <Text style={[styles.h, eco && { color: '#A5D6A7' }]}>        {eco ? '🍃 وضع التوفير' : '⚡ الوضع العاديّ'}      </Text>      <Text style={eco ? styles.ecoText : styles.text}>        {eco          ? 'قراءة المستشعرات كل 5 ثوانٍ، بلا حركات، ثيمٌ داكن.'          : 'تحديثٌ فوريّ، حركاتٌ كاملة، ثيمٌ فاتح.'}      </Text>      <Text style={styles.lvl}>البطارية: {bat.level}%</Text>    </View>  );} const styles = StyleSheet.create({  box: { padding: 22, borderRadius: 14, margin: 10, backgroundColor: '#FFF8E1' },  ecoBox: { backgroundColor: '#14241A' },  h: { fontSize: 20, fontWeight: 'bold', color: '#E8820C' },  text: { marginTop: 8, color: '#5D4037' },  ecoText: { marginTop: 8, color: '#C8E6C9' },  lvl: { marginTop: 10, color: '#888' },});

السلوك كلّه يتبع العلَم eco المشتقّ من البطارية. فعّل التوفير وراقب التحوّل.

٣قياس التحسّن (≥15%)

«ما لا يُقاس لا يُحسَّن». نبني نموذجًا بسيطًا لتقدير الاستهلاك: مجموع «وحدات طاقة» لكل نشاط. ثم نقارن الأساسيّ بالموفّر ونحسب نسبة الخفض:

import { View, Text, StyleSheet } from 'react-native'; // وحدات طاقة تقديريّة لكل نشاط (في الدقيقة)const COST = { sensorHz: 2, animation: 3, refresh: 1, brightness: 4 }; function estimate({ sensorHz, animations, refreshes, brightness }) {  return sensorHz * COST.sensorHz + animations * COST.animation       + refreshes * COST.refresh + brightness * COST.brightness;} export default function App() {  const base = estimate({ sensorHz: 10, animations: 1, refreshes: 10, brightness: 8 });  const eco  = estimate({ sensorHz: 2,  animations: 0, refreshes: 3,  brightness: 3 });  const saved = Math.round((1 - eco / base) * 100);   return (    <View style={styles.box}>      <Row label="الوضع الأساسيّ" value={base + ' وحدة'} />      <Row label="وضع التوفير" value={eco + ' وحدة'} />      <Text testID="saved" style={[styles.saved, { color: saved >= 15 ? '#2E7D32' : '#C62828' }]}>        خفضٌ بنسبة {saved}% {saved >= 15 ? '✅ تجاوز الهدف (15%)' : '✗ دون الهدف'}      </Text>    </View>  );} function Row({ label, value }) {  return (    <View style={styles.row}>      <Text style={styles.l}>{label}</Text>      <Text style={styles.v}>{value}</Text>    </View>  );} const styles = StyleSheet.create({  box: { padding: 20, margin: 10 },  row: { flexDirection: 'row', justifyContent: 'space-between', paddingVertical: 8, borderBottomWidth: 1, borderColor: '#eee' },  l: { color: '#555' }, v: { fontWeight: 'bold', color: '#E8820C' },  saved: { marginTop: 14, fontSize: 18, fontWeight: 'bold', textAlign: 'center' },});

النموذج يقارن استهلاكين فيخرج خفضًا محسوبًا (هنا ~72%). على الجهاز تقيس الاستهلاك فعليًّا بأدوات المنصّة؛ المبدأ واحد: قِس، قارن، أثبت الخفض.

توقّع وتحقّق

مبدأ توفير الطاقة:

في وضع التوفير نُخفّض:

لإثبات الخفض يجب:

الثيم الداكن في وضع التوفير:

الخلاصة

تحدٍّ برمجي: حاسبة الخفض

متقدم

احسب نسبة خفض الطاقة بين وضعين.

المطلوب:
  • عرّف base وeco (eco أقلّ).
  • احسب saved = Math.round((1 - eco/base) * 100).
  • <Text testID="saved"> يعرض النسبة، و<Text testID="ok"> «نجح» إن كانت ≥15 وإلا «لم يكفِ».
👀 اعرض الناتج المطلوب (وجرّبه)
✓ التحقق الآلي من حلّك:
  • الكود يعمل بلا أخطاء في Console
  • الخفض 30%
  • الحكم «نجح»
  • حساب النسبة

💡 تلميح 1
النسبة: (1 - eco/base) * 100 = 30%.
💡 تلميح 2
الحكم: saved >= 15.

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

import { View, Text, StyleSheet } from 'react-native'; export default function App() {  const base = 100;  const eco = 70;  const saved = Math.round((1 - eco / base) * 100);  const ok = saved >= 15;  return (    <View style={{ padding: 20, gap: 8 }}>      <Text testID="saved" style={styles.s}>الخفض: {saved}%</Text>      <Text testID="ok" style={{ color: ok ? '#2E7D32' : '#C62828' }}>{ok ? 'نجح' : 'لم يكفِ'}</Text>    </View>  );} const styles = StyleSheet.create({ s: { fontSize: 22, fontWeight: 'bold', color: '#E8820C' } });
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس