Look at the LunarLander sample that follows with the Android SDK - it contains pretty much a complete SurfaceView/Canvas implementation. There is little reason not to
Canvas is good for most simple graphical requirements. If you require animation/action in your game, OpenGL is probably the way to go, though. There exist several libraries out there - LibGDX and AndDevEngine being the most popular.
I'm not worried about the use of Canvas or OpenGL ES. I'm more about how the game loop is to be designed around Canvas and SurfaceView, in order to maximize the amount of FPS you can acculumate on an Android phone.
In other words, I'm trying to lower the O(n^2) of my game loop (as I see it, I have a while loop nested inside a while loop, and 1 arbitary function that unlocks and locks the Canvas for the SurfaceView.)