[Galaxy S II Android Development] hawkerpaul:
Since the JB leak there has been quite a bit of discussion about Fast Dormancy, so I thought I would try to explain things a little.

Firstly a little explanation on what FD actually is.

When your phone is connected via data (not wifi) your phone needs to enter certain states in order to maintain this connection. If your Operator does not have FD support or you have it disabled, then basically your states are just connected or not connected. What this means is that every time your phone connects to data, it will have to go through all of its internal functions in order to achieve the connection and perform the data transfer. This is slow and obviously the more processing that is required, the more the hit on battery.

FD tries to limit this problem by having several different states. Each state has a different level of connection throughput and power consumption.

DCH - High volume data (highest power consumption)

FACH - Lower volume

PCH - No data but keeps connection

IDLE_CCCH - Not entirely sure about this one but I think its an interim stage

IDLE - Connection dropped (lowest power consumption)

When in DCH state, your phone is doing the highest volume of data transfer, and obviously consuming most power out of your battery.

The way FD will work is when transfer rates drop, the state drops to FACH for less power consumption and then back up immediately to DCH if required, or if this transfer state is over for the time being, (eg. you have stopped browsing) instead of going back to IDLE which would mean going through all the connection procedures next time data is required, the state drops down to PCH. This is a very low powered state, and when data is subsequently required, it can then immediately go back up to FACH or DCH with minimal effort. Going up/down between each states takes the least amount of time and battery

To turn FD on/off enter *#9900# in the dialler to get into the SysDump screen then select the Fast Dormancy option

Whether you keep FD on or not depends primarily on if your network operator supports it.

If your network operator supports it, then enabling it is not necessarily the best answer, as it then depends on the combination of the following 2 things:

1. How you use your phone

If you are a heavy data user then enabling FD is almost certainly the way to go. The less the phone needs to do to fire back up the connection the better. However, if you rarely use the phone for a data connection, then it may prove beneficial to you to switch it off so that the IDLE state is entered sooner. Bear in mind before you decide on if you should turn it on or off, what your data sync type options for contacts/calendar/email etc. are. If you dont browse too often, you may still be using data quite often even though you are not physically doing so through various background syncs.

2. How "intelligent" your Operator's FD actually is.

This can be done via a simple test. With wifi off and FD enabled, at the dialler, type *#0011#. This takes you into the ServiceMode menu. The important piece of information here is the RRC State line. Press the home button and open a browser session and go into a web site, then immidiately long press the home to get the list of tasks and select the ServiceMode app. The RRC State line should be DCH (or at least FACH) and you should see some activity in your signal indicator arrows on the status bar. Eventually you should see it drop down from DCH -> FACH -> PCH -> IDLE (sometimes you may see IDLE_CCCH). Ideally, the state should stay at PCH for a while, then eventually drop to idle.

My findings are on JB, that FD isn't handled as well as it was on ICS, but this will probably be due to it still being a leak. It seems for me, it goes from DCH -> FACH, and shortly after that drops to IDLE. This is not great if your going to be using more data shortly, but ok if you are no longer browsing. Swings+roundabouts.

Remember FD only applies to a data connection. It does not kick in whatsoever when you are connected to wifi.

The quality of your data connection (ie. H+, H, 3G) will also have a bearing on how FD will perform. Better connectivity should give you a more efficient FD performance.

Tip 1.

If your wifi sleep policy is set to "keep wifi on during sleep only when plugged in" then this will mean your data will take a hit whenever your screen is off (unless plugged in of course) If you think FD is not for you because "I'm almost always connected to wifi" (ie. at home/work) then you will still need to consider what the best FD policy is for you when on this sleep policy, as obviously, your screen is off most of the day.

Tip 2.

If you are not connected to wifi overnight (either your not at home, or your wifi sleep policy dictates) bear in mind what your phone does overnight in terms of background data activity (ie. your data sync options and widgets such as news/weather etc). If you have minimal data activity overnight (you set your widgets to sleep for example), then it would be better to switch FD off, as less battery would be consumed to go straight back to IDLE than hang around for possibly 10 minutes or more each time in FACH.

Note

You may well have a slightly frisky l2_hsic wakelock when FD is disabled, but when FD is enabled you may well find this drops slightly, only to find another little devil called secril_fd-interface kick in instead, so again, swings and roundabouts.

I did extensive testing on this about 6 months ago, and came to the conclusion that its better FOR ME to turn FD off, but the differences were not drastic. It can however make huge differences for others, depending on your Operator and your usage habits. I admit, I've not done too much testing on JB yet, as I have kept it on. I may turn it off over the next day or two to see.

Bottom line is, try it and see what works best for you.

Fast Dormancy in a nutshell