1. Avoid long-running frequent timers
Frequently triggering timers may prevent the processor from entering the low-power sleep mode and increase power consumption significantly. In Symbian programming paradigms, asynchronous notification-based services are embraced instead of polling.
2. Lazy construction and use of resources only when needed
Construct/load/open/initialize services just before they are needed and close/destruct objects right after use. In this way, unnecessary memory is not allocated and possible specific hardware components (like Bluetooth chip, cellular radio, HW accelerators) can be turned off by power management.
3. Implement idle time-outs for resources
Close hardware resources automatically after a period of user inactivity so that resources are not left open if the user forgets to close them explicitly.
4. Analyze your application to see where the most power is used and concentrate on these areas
Efficient code runs faster and consumes less energy. When needed, use tools such as Performance Investigator that is provided as an extension plug-in in Carbide.c++.
5. Consider carefully when to use fancy UI effects – less can be more
Animations and other similar user interface effects can be turned off when the device is locked or application is on the background. In general, various bells and whistles, like animations and UI transitions, look nice but they also consume energy. Therefore, at least provide an option for end users to turn them off if they do not add any value and are not necessary to perform a given task.
6. Use only good enough quality for content (image, audio, animations…)
- Use as low a frame rate as possible in animations.
- Avoid unnecessary high image quality – may not look essentially better.
- Avoid unnecessary high audio quality – may not sound essentially better.
- Use energy-efficient colors.
7. Enable effective screen saver and backlight usage
Do not override backlight and screen saver settings because they work automatically according to user-set preferences. In special cases, however, overriding the settings is understandable (for example, in a navigation application). Consider turning the display and lights off during lengthy operations, for example, during downloading (partial display mode can be used to show a progress bar without backlight) or other processing that takes a long time.
8. Monitor device and battery power status
Monitor the screen saver status, key locks, and foreground/background events to detect whether the device is in active use. If the device is not in active use, react accordingly.
Monitor the battery power status to see if the battery level is sufficient, and whether the device is connected to a power supply (charger or car kit).
9. Optimize the usage of radio receivers and transmitters like cellular radio, WLAN, GPS, and Bluetooth
For example:
- Optimize data transmission for size.
- Take advantage of caching and optionally downloadable data items (images, message body, attachments, etc.).
- Avoid protocols that require polling.
- Do not keep data connections open unnecessarily.
- Prefer TCP over UDP since it requires less keep-alive messages. This is especially important for always-on applications.
- Prefer bursty data transfer to constant “drop-by-drop” transfer.
- Minimize the wake-up frequency of a WLAN device with optimal access point settings: set beacon and DTIM periods big enough and avoid unnecessary broadcast and multicast messages.
- Enable WLAN power save in the device and avoid unnecessary and too frequent background scanning.
- GPS chip consumes quite a lot of energy. Think carefully how often location updates are needed. If they are needed seldom, consider turning off GPS between updates.
10. Optimize CPU usage
Efficient code runs faster and consumes less energy. When needed, use tools such as Performance Investigator that is provided as an extension plug-in in Carbide.c++.
For more detailed information, read the documents S60 Platform: Effective Power and Resource Management and Recommendations for Reducing Power Consumption of Always-on Applications.

