The Blue Jays won for the fifth time in six games.
Oakland's Rich Harden gave up a run on five hits over seven innings and left with the game tied at 1-1. Chad Gaudin threw a scoreless eighth for the Athletics, but Toronto broke through against Keith Foulke (0-1) in the ninth.
Shannon Stewart walked to lead off the inning and was sacrificed to second by Aaron Hill before Rios doubled to left.
That gave the win to Roy Halladay (6-5), who allowed a run on eight hits with nine strikeouts in eight innings.
Ryan came on in the ninth and allowed the tying run to reach second with one away. But Kurt Suzuki flew out to left and, after Jack Hannahan walked, Bobby Crosby grounded into a force play to end the game and give Ryan his 12th save.