In reply to Darkskys:
ViewRanger is the one I use, but for road cycling it has one major complication:
If you create a route on the website (with 'follow road' enabled) and sync it to the phone, you get a waypoint (and hence trigger the alarm) at every bend in the road. Useless! If you only have waypoints at relevant junctions then the navigation display is useless (it doesn't often point in the right direction) and you can't use the 'off-route' alarm function (which is great for warning you when you've gone wrong).
I've managed to get round this with a script which modifies the GPX file to turn off the proximity alarm on 'bends' and to attach different sounds to waypoints so I get a useful audible indication of a turn ("Oy, left turn coming up!"). The latter means the phone screen can stay off most of the time and save battery power.
It works, but it's a bit of a pain to set up a route (create route, sync phone, export gpx to PC (via DropBox), run script, import modified gpx from PC), so gets infequent use.
Any better solutions?