Pole sitter Alvaro Bautista battled Marco Simoncelli and Hector Barbera for supremacy in the early stages, but Bautista suffered a lowside fall while leading, with Simoncelli and Barbera fading less dramatically down the order.
By contrast, the KTM riders got stronger as the race went on, Kallio winning by 3.238secs over Aoyama, while last turn heartbreak for a charging Yuki Takahashi saw the Honda rider drop from third to seventh with some form of technical problem.
Rookie Mattia Pasini capitalised on Takahashi's misfortune to clinch a surprise podium ahead of Simoncelli, Alex Debon and Barbera. Bautista remounted after his accident and took his damaged Aprilia up to twelfth place.
Kallio is now 21 points clear of Pasini at the head of the standings.
Race results - Shanghai:
1. Kallio (KTM)
2. Aoyama (KTM) +3.238secs
3. Pasini (Aprilia) +13.811secs
4. Simoncelli (Gilera) +18.474secs
5. Debon (Aprilia) +21.066secs
6. Barbera (Aprilia) +25.158secs
7. Takahashi (Honda) +29.990secs
8. Wilairot (Honda) +39.871secs
9. Espargaro (Aprilia) +48.344secs
10. Faubel (Aprilia) +55.470secs
13. Laverty (Aprilia) +1min 0.732secs