Το Doze Mode είναι μια λειτουργία εξοικονόμησης ενέργειας στο Android που εισήχθη στην έκδοση 6.0 Marshmallow και περιορίζει σημαντικά τη δραστηριότητα παρασκηνίου των εφαρμογών όταν η συσκευή είναι ανενεργή. Το σύστημα μεταφέρει τις εφαρμογές σε κατάσταση μειωμένης κατανάλωσης ενέργειας, αναβάλλοντας αιτήματα δικτύου, συγχρονισμό και JobScheduler για να παρατείνει τη διάρκεια ζωής της μπαταρίας. Σύμφωνα με ανάλυση του Android Developers, 2025, το Doze Mode επιτρέπει την αύξηση του χρόνου αναμονής της συσκευής έως 2–3 φορές ανάλογα με το μοντέλο και την έκδοση OS.
Κύρια σημεία
Το Doze Mode είναι ένας ενσωματωμένος μηχανισμός εξοικονόμησης ενέργειας στο Android που ενεργοποιείται όταν η συσκευή δεν είναι συνδεδεμένη σε φορτιστή, η οθόνη είναι απενεργοποιημένη και ο χρήστης δεν αλληλεπιδρά με τη συσκευή για συγκεκριμένο χρονικό διάστημα. Σκοπός του Doze είναι να ελαχιστοποιήσει τη δραστηριότητα παρασκηνίου των εφαρμογών για να παρατείνει στο μέγιστο τη διάρκεια ζωής της μπαταρίας σε κατάσταση αναμονής. Το σύστημα αναβάλλει το JobScheduler, τον συγχρονισμό λογαριασμών, το AlarmManager και τα αιτήματα δικτύου.
Η λειτουργία εισήχθη στο Android 6.0 Marshmallow (API 23) και βελτιώθηκε σημαντικά σε επόμενες εκδόσεις. Στο Android 7.0 Nougat εμφανίστηκε η δεύτερη φάση (Light Doze), που ενεργοποιείται κατά την κίνηση της συσκευής. Το Android 8.0 εισήγαγε πρόσθετους περιορισμούς σε υπηρεσίες παρασκηνίου που λειτουργούν μαζί με το Doze. Στο Android 12+, το Doze ενσωματώθηκε με το ενημερωμένο σύστημα διαχείρισης μπαταρίας που αναλύει τη συμπεριφορά του χρήστη.
Είναι σημαντικό να κατανοήσουμε: Το Doze Mode δεν απενεργοποιεί πλήρως τις εφαρμογές. Τις μεταφέρει σε κατάσταση με αναβληθείσες εργασίες, αλλά δεν σκοτώνει διεργασίες. Η Foreground Service με ειδοποίηση συνεχίζει να λειτουργεί, οι ειδοποιήσεις push υψηλής προτεραιότητας (FCM high-priority) παραδίδονται και οι ξυπνητήρια ενεργοποιούνται σύμφωνα με το πρόγραμμα. Το Doze επηρεάζει μόνο λειτουργίες παρασκηνίου που ο χρήστης δεν βλέπει και δεν αναμένει εκείνη τη στιγμή.
Το Doze Mode ενεργοποιείται όταν πληρούνται όλες οι συνθήκες: η οθόνη είναι απενεργοποιημένη για περισσότερο από 30 λεπτά (πρώτη ενεργοποίηση), η συσκευή είναι ακίνητη (χρησιμοποιείται επιταχυνσιόμετρο), δεν είναι συνδεδεμένη σε φορτιστή. Εάν ο χρήστης πάρει το τηλέφωνο ή συνδέσει τον φορτιστή, το Doze απενεργοποιείται αμέσως. Στο Android 7+, το Light Doze ενεργοποιείται μετά από 5 λεπτά αδράνειας, ακόμη και κατά την κίνηση της συσκευής.
Το Doze Mode διαχειρίζεται τη δραστηριότητα παρασκηνίου μέσω της υπηρεσίας συστήματος DeviceIdleController, η οποία αναλύει την κατάσταση των αισθητήρων, της οθόνης και του φορτιστή. Όταν πληρούνται όλες οι συνθήκες ενεργοποίησης, το σύστημα μεταφέρει τις εφαρμογές σε κατάσταση αναμονής, ομαδοποιώντας τα αιτήματά τους σε παράθυρα υπηρεσίας. Μέσα σε αυτά τα παράθυρα, όλες οι αναβληθείσες εργασίες — κλήσεις δικτύου, συγχρονισμός, AlarmManager — εκτελούνται μαζικά.
Ο PowerManager συστήματος ελέγχει ποιες εφαρμογές μπορούν να βγουν από το Doze. Οι ειδοποιήσεις push υψηλής προτεραιότητας (FCM high-priority) μπορούν να αφυπνίσουν τη συσκευή για την παράδοση μηνύματος. Το σύστημα επίσης αγνοεί το Doze για εφαρμογές που έχει προσθέσει ο χρήστης στο Whitelist βελτιστοποίησης μπαταρίας. Όλες οι άλλες εφαρμογές πρέπει να περιμένουν το επόμενο παράθυρο υπηρεσίας.
Η διάρκεια των παραθύρων υπηρεσίας στο Deep Doze αυξάνεται εκθετικά: πρώτο παράθυρο μετά από 1 ώρα, δεύτερο μετά από 2 ώρες, τρίτο μετά από 4 ώρες και ούτω καθεξής έως το μέγιστο διάστημα των 12 ωρών. Αυτό σημαίνει ότι όσο περισσότερο η συσκευή παραμένει στο Doze, τόσο σπανιότερα οι εφαρμογές μπορούν να εκτελούν εργασίες παρασκηνίου — η μπαταρία εξοικονομείται μέγιστα επιθετικά.
Στο Doze Mode, όλα τα αιτήματα δικτύου αναστέλλονται μέχρι την άφιξη του παραθύρου υπηρεσίας. Εξαίρεση αποτελούν μόνο μηνύματα FCM high-priority (με την ετικέτα “high_priority” στο payload) και σήματα από το AlarmManager με σημαίες setAndAllowWhileIdle() ή setExactAndAllowWhileIdle(). Οι συνήθεις κλήσεις δικτύου μέσω Retrofit, OkHttp ή Volley δεν θα εκτελεστούν έως ότου ανοίξει το παράθυρο.
Το Doze Mode αποτελείται από δύο φάσεις: Light Doze (ελαφρύς ύπνος) και Deep Doze (βαθύς ύπνος). Κάθε φάση επιβάλλει τους δικούς της περιορισμούς και έχει διαφορετικά όρια ενεργοποίησης. Η κατανόηση της διαφοράς μεταξύ των φάσεων είναι κρίσιμη για τον προγραμματιστή που σχεδιάζει εργασίες παρασκηνίου ανθεκτικές στη λειτουργία εξοικονόμησης ενέργειας.
Το Light Doze ενεργοποιείται μετά από 5–30 λεπτά αδράνειας της συσκευής (οθόνη απενεργοποιημένη, χωρίς κίνηση). Σε αυτή τη φάση, τα αιτήματα δικτύου και ο συγχρονισμός αναστέλλονται, αλλά το AlarmManager και το JobScheduler συνεχίζουν να λειτουργούν με μικρές καθυστερήσεις. Οι εφαρμογές μπορούν να βγουν από το Light Doze όταν λάβουν ειδοποίηση push ή όταν συνδεθούν σε φορτιστή. Το Light Doze δεν απαιτεί πλήρη ακινησία — η συσκευή μπορεί να κινείται.
Το Deep Doze επέρχεται μετά από 60–90 λεπτά αδράνειας με ακίνητη συσκευή (το επιταχυνσιόμετρο δεν καταγράφει κίνηση). Στο Deep Doze, το σύστημα αναβάλλει εργασίες πολύ πιο επιθετικά: τα παράθυρα υπηρεσίας ανοίγουν σπανιότερα (με εκθετική αύξηση του διαστήματος), το AlarmManager ενεργοποιείται μόνο με σημαίες setAndAllowWhileIdle() και το WakeLock δεν λειτουργεί σε κανονική λειτουργία. Οι εφαρμογές που δεν βρίσκονται στο Whitelist χάνουν σχεδόν εντελώς τη δραστηριότητα παρασκηνίου.
| Παράμετρος | Light Doze | Deep Doze |
|---|---|---|
| Χρόνος ενεργοποίησης | 5–30 λεπτά | 60–90 λεπτά |
| Απαίτηση κίνησης | Δεν απαιτείται | Ακινησία |
| Διάστημα παραθύρων | 10–60 λεπτά | 1–12 ώρες |
| AlarmManager | Λειτουργεί με καθυστερήσεις | Μόνο withAllowWhileIdle |
| Δίκτυο σε παράθυρα | Διαθέσιμο | Διαθέσιμο |
Το Doze Mode επιβάλλει διάφορες κατηγορίες περιορισμών που ο προγραμματιστής πρέπει να λάβει υπόψη κατά τον σχεδιασμό της εφαρμογής. Η αγνόηση αυτών των περιορισμών οδηγεί στο να μην εκτελούνται εργασίες παρασκηνίου και ο χρήστης βλέπει εσφαλμένη λειτουργία της εφαρμογής — έλλειψη ενημερώσεων, μη αποσταλμένα μηνύματα, μη εκτελεσμένο συγχρονισμό.
Όλα τα αιτήματα δικτύου αποκλείονται μέχρι την άφιξη του παραθύρου υπηρεσίας. Αυτό περιλαμβάνει κλήσεις HTTP, συνδέσεις WebSocket, λήψεις αρχείων. Εξαίρεση — μηνύματα FCM high-priority που διέρχονται μέσω ξεχωριστού καναλιού Google Play Services, ανεξάρτητου από το Doze. Για συγχρονισμό κρίσιμων δεδομένων, συνιστάται η χρήση του WorkManager με πολιτική NetworkType.CONNECTED.
Το AlarmManager στο Deep Doze αναβάλλει όλα τα ξυπνητήρια, εκτός από αυτά που δημιουργήθηκαν με μεθόδους setAndAllowWhileIdle() και setExactAndAllowWhileIdle(). Ωστόσο, ακόμη και αυτές οι μέθοδοι έχουν περιορισμό — όχι περισσότερες από 1 ενεργοποίηση ανά 9 λεπτά ανά εφαρμογή. Τα ακριβή ξυπνητήρια setExact() στο Deep Doze δεν εγγυώνται ενεργοποίηση την καθορισμένη ώρα.
Το WakeLock στο Doze Mode λειτουργεί μη τυπικά: το σύστημα δεν διατηρεί το κλείδωμα ύπνου για εφαρμογές εκτός Whitelist. Ακόμη κι αν η εφαρμογή έχει λάβει σωστά το PARTIAL_WAKE_LOCK, κατά την είσοδο στο Deep Doze το σύστημα μπορεί να το απελευθερώσει αναγκαστικά. Ο μόνος τρόπος να εγγυηθεί η εκτέλεση εργασίας στο Doze είναι η χρήση Foreground Service με ειδοποίηση.
Το Whitelist (λευκή λίστα) Doze είναι το σύνολο εφαρμογών στις οποίες το σύστημα επιτρέπει δραστηριότητα παρασκηνίου στη λειτουργία εξοικονόμησης ενέργειας με ελάχιστους περιορισμούς. Ο χρήστης μπορεί να προσθέτει χειροκίνητα εφαρμογές μέσω Ρυθμίσεις → Μπαταρία → Βελτιστοποίηση μπαταρίας. Οι εφαρμογές συστήματος, οι εκκινητές και οι υπηρεσίες Google Play Services βρίσκονται στο Whitelist από προεπιλογή.
Ο προγραμματιστής μπορεί να ζητήσει προσθήκη στο Whitelist μέσω συστήματος διαλόγου με Intent ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Για αυτό, απαιτείται η άδεια REQUEST_IGNORE_BATTERY_OPTIMIZATIONS στο manifest. Ωστόσο, η Google δεν συνιστά να ζητάτε εξαίρεση χωρίς σοβαρό λόγο — εφαρμογές που κάνουν κατάχρηση αυτής της δυνατότητας κινδυνεύουν να απορριφθούν κατά τη δημοσίευση στο Google Play.
Χωρίς Whitelist, η εφαρμογή μπορεί να χρησιμοποιήσει FCM high-priority για να αφυπνίσει τη συσκευή από το Doze. Κάθε τέτοιο μήνυμα δίνει στην εφαρμογή ένα σύντομο παράθυρο (10–30 δευτερόλεπτα) για να εκτελέσει την εργασία. Για μεγαλύτερες λειτουργίες, η εφαρμογή πρέπει να εκκινήσει Foreground Service που θα συνεχίσει να λειτουργεί στα παράθυρα υπηρεσίας Doze. Η Google παρέχει επίσης μηχανισμό απαλλαγής για ορισμένους τύπους εφαρμογών: πλοήγησης, ιατρικές, ανταλλαγής μηνυμάτων.
Για να ελέγξετε εάν η εφαρμογή βρίσκεται στο Whitelist βελτιστοποίησης μπαταρίας, χρησιμοποιείται η μέθοδος powerManager.isIgnoringBatteryOptimizations(). Εάν η μέθοδος επιστρέφει false, η εφαρμογή υπόκειται σε όλους τους περιορισμούς Doze. Εάν true — η εφαρμογή μπορεί να χρησιμοποιεί Wakelock, AlarmManager και δίκτυο χωρίς περιορισμούς ακόμη και στο Deep Doze. Ωστόσο, η κατάχρηση αυτού του προνομίου θα οδηγήσει σε κακές κριτικές χρηστών.
Η δοκιμή της συμπεριφοράς της εφαρμογής στο Doze Mode είναι υποχρεωτικό στάδιο ανάπτυξης, καθώς το Doze μπορεί να διαταράξει λειτουργίες παρασκηνίου. Το Android παρέχει εργαλεία γραμμής εντολών μέσω ADB για την αναγκαστική μεταφορά της συσκευής σε Light Doze και Deep Doze. Η δοκιμή πρέπει να πραγματοποιείται σε φυσική συσκευή ή εξομοιωτή με Android 6.0+.
Για είσοδο στο Light Doze χρησιμοποιείται η εντολή adb shell dumpsys deviceidle step light. Για Deep Doze — adb shell dumpsys deviceidle step deep. Η εντολή adb shell dumpsys deviceidle force-idle deep μεταφέρει αμέσως τη συσκευή σε Deep Doze χωρίς αναμονή για το τυπικό χρονικό όριο. Μετά τη δοκιμή, το Doze απενεργοποιείται με την εντολή adb shell dumpsys deviceidle unforce.
# Υποχρεωτική είσοδος σε Light Doze
$ adb shell dumpsys deviceidle step light
# Υποχρεωτική είσοδος σε Deep Doze
$ adb shell dumpsys deviceidle step deep
# Άμεση μετάβαση σε Deep Doze
$ adb shell dumpsys deviceidle force-idle deep
# Έξοδος από Doze
$ adb shell dumpsys deviceidle unforce
# Προβολή κατάστασης Doze
$ adb shell dumpsys deviceidle
Μετά τη μεταφορά σε Doze Mode, πρέπει να ελεγχθεί: εάν λειτουργούν τα αιτήματα δικτύου (πρέπει να αναβάλλονται), εάν ενεργοποιείται το AlarmManager, εάν παραδίδονται μηνύματα FCM, εάν εκτελούνται σωστά οι εργασίες WorkManager. Το WorkManager στο Doze συνεχίζει να λειτουργεί: οι εργασίες του εκτελούνται στα παράθυρα υπηρεσίας. Ωστόσο, εάν η εργασία απαιτεί άμεση εκτέλεση, πρέπει να καθοριστεί setExpedited() ή να χρησιμοποιηθεί Foreground Service.
Η ανάπτυξη εφαρμογής ανθεκτικής στο Doze Mode απαιτεί επανεξέταση της προσέγγισης στις εργασίες παρασκηνίου. Η Google συνιστά τον σχεδιασμό της εφαρμογής ώστε να λειτουργεί σωστά υπό οποιουσδήποτε περιορισμούς Doze, χωρίς να βασίζεται στην άμεση εκτέλεση λειτουργιών παρασκηνίου. Η θεμελιώδης αρχή — χρήση του WorkManager για όλες τις εργασίες παρασκηνίου που μπορούν να αναβληθούν.
Το WorkManager είναι το συνιστώμενο API της Google για εργασίες παρασκηνίου, καθώς προσαρμόζεται αυτόματα στο Doze. Το WorkManager χρησιμοποιεί JobScheduler (API 23+) ή AlarmManager + BroadcastReceiver σε παλαιότερες εκδόσεις. Οι εργασίες WorkManager εκτελούνται στο πλησιέστερο παράθυρο υπηρεσίας Doze και εάν χρειαστεί — άμεσα μέσω Expedited Work (Foreground Service στο παρασκήνιο).
Εάν η εργασία δεν μπορεί να αναβληθεί (αναπαραγωγή πολυμέσων, πλοήγηση, VoIP), χρησιμοποιήστε Foreground Service με υποχρεωτική ειδοποίηση. Η Foreground Service λαμβάνει εξαίρεση από το Doze: μπορεί να διατηρεί WakeLock και να εκτελεί αιτήματα δικτύου. Ωστόσο, ακόμη και η Foreground Service υπόκειται στην πολιτική παραθύρων υπηρεσίας Deep Doze για ορισμένους τύπους εργασιών — για παράδειγμα, dataSync.
Για παράδοση μηνυμάτων που απαιτούν άμεση προσοχή (εισερχόμενη κλήση, επείγουσα ειδοποίηση), χρησιμοποιήστε μηνύματα FCM high-priority. Τέτοια μηνύματα αφυπνίζουν τη συσκευή από το Doze και δίνουν στην εφαρμογή ένα σύντομο παράθυρο για επεξεργασία. Μην χρησιμοποιείτε high-priority για συνήθεις ειδοποιήσεις — αυτό οδηγεί σε γρήγορη αποφόρτιση της μπαταρίας και μπορεί να εκληφθεί από το Google Play ως παραβίαση πολιτικής.
Συχνές Ερωτήσεις
Το Doze Mode είναι μια λειτουργία εξοικονόμησης ενέργειας Android 6+ που περιορίζει τη δραστηριότητα παρασκηνίου εφαρμογών όταν η συσκευή δεν χρησιμοποιείται (οθόνη απενεργοποιημένη, χωρίς κίνηση). Το σύστημα αναβάλλει αιτήματα δικτύου, συγχρονισμό και JobScheduler, ομαδοποιώντας τα σε παράθυρα υπηρεσίας για εξοικονόμηση μπαταρίας.
Το Doze Mode έχει δύο φάσεις: Light Doze (ελαφρύς ύπνος) ενεργοποιείται μετά από 5–30 λεπτά, επιτρέπει τη λειτουργία AlarmManager με καθυστερήσεις. Deep Doze (βαθύς ύπνος) επέρχεται μετά από 60–90 λεπτά ακινησίας, περιορίζοντας επιθετικά εργασίες παρασκηνίου με παράθυρα υπηρεσίας έως 12 ώρες.
Το Doze αποκλείει αιτήματα δικτύου, αναβάλλει το AlarmManager (εκτός setAndAllowWhileIdle), απελευθερώνει αναγκαστικά το WakeLock και ομαδοποιεί το JobScheduler σε παράθυρα υπηρεσίας. Εξαίρεση — Foreground Service, FCM high-priority και εφαρμογές στο Whitelist χρήστη.
Ζητήστε άδεια REQUEST_IGNORE_BATTERY_OPTIMIZATIONS στο manifest και στείλτε Intent με ενέργεια ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS. Το σύστημα θα εμφανίσει διάλογο στον χρήστη. Η προσθήκη στο Whitelist είναι προνόμιο που η Google συνιστά να χρησιμοποιείται μόνο από κρίσιμες εφαρμογές.
Χρησιμοποιήστε εντολές ADB: adb shell dumpsys deviceidle force-idle deep για είσοδο σε Deep Doze, adb shell dumpsys deviceidle step light για Light Doze, adb shell dumpsys deviceidle unforce για έξοδο. Ελέγξτε τη λειτουργία WorkManager, AlarmManager και FCM σε κάθε λειτουργία.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης