إدارة استهلاك الطاقة: وضع التوفير وقياس التحسّن
ترشيد الاستهلاك وإثبات التحسّن بالأرقام. ⏱ نحو 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%). على الجهاز تقيس الاستهلاك فعليًّا بأدوات المنصّة؛ المبدأ واحد: قِس، قارن، أثبت الخفض.
توقّع وتحقّق
مبدأ توفير الطاقة:
في وضع التوفير نُخفّض:
لإثبات الخفض يجب:
الثيم الداكن في وضع التوفير:
الخلاصة
- الطاقة محدودة؛ افعل أقلّ حين لا يلزم الأكثر.
- وضع التوفير يخفّض تردّد المستشعرات والحركات والتحديث.
- أثبت الخفض بالقياس والمقارنة (هدف ≥15%).
تحدٍّ برمجي: حاسبة الخفض
متقدماحسب نسبة خفض الطاقة بين وضعين.
- عرّف
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' } });