For me, you need to purchase WAKE_LOCK to start the GCM Service , and then release it, since your processor should not sleep before starting the service.
The CPU goes into sleep mode some time after the screen turns off. When your device is in sleep mode, your threads will be suspended.
If you acquired a tracking lock and did not release it, it probably consumes a huge amount of battery.
You can receive GCM messages while your device is in standby mode.
When a message arrives, it depends on your code whether to wake up the device and show a notification or not.
You can also delay the message until the device exits the standby state using the delay_while_idle flag.
You can process messages by registering BroadcastReceiver
Please refer to the SO questions and answers:
Wakelak in deep sleep
Power management
GCM Standby
WAKE_LOCK
source share