There are three aspects to hunger in Minecraft.
1) Food Level: Visible from the hunger bar. Presented as ten drumstick icons. Each icon represents two hunger points, for a maximum of 20 (when full). Replenished by eating food. Amount is dependent on food type.
2) Food Saturation Level: Not visible to the player. The player's hunger will not decrease until their food saturation level reaches 0. The hunger bar will shake/jitter when food saturation is at 0. Replenished by eating food. Amount is dependent on food type.
3) Food Exhaustion Level: Not visible to the player. Value can range from 0.0 to 4.0. Once it reaches 4.0, food saturation is reduced by 1.0 and the exhaustion level resets to 0.0. If food saturation is already at 0.0, the player will lose a hunger point (half a drumstick).
Here's a list of the actions which increase your exhaustion level, and by how much.
- Walking/sneaking - 0.01 per metre
- Swimming - 0.0125 per metre
- Breaking a block - 0.025
- Sprinting - 0.1 per metre
- Jumping - 0.2
- Attacking an enemy - 0.3
- Receiving any damage - 0.3
- Effects of food poisoning (raw chicken/rotten flesh) - 0.5 per second (15.0 total)
- Effects of food poisoning (pufferfish) - 1.5 per second (22.5 total)
- Sprinting jump - 0.8
- Regeneration one health point - 3.0
For further reading and specific information on how different types of food affect saturation, visit the wiki page for Hunger: http://minecraft.gamepedia.com/Hunger