Normals do not need to be computed/updated every frame. They are computed or readed as startup and then at render time they are just used. The orientation of the normals is automatically done because they are multiplied by the modelview matrix (the same used to compute the vertices positions). You must recompute them only if the mesh changes.
Side note, not related with your code: if your mesh is rendered scaled (if you use glScalef in some sort of way before rendering the object) then you must know that the normals get scaled as well, which is not good, because they get un-normalized. To prevent that, you can call at startup glEnable(GL_NORMALIZE) to force OpenGL to automatically normalize normals at render time. Otherwise the lighting effects on scaled object look and behave weird. If you are not using scaled objects, there is no need to enable the auto-normalization.
About the code: the posted functions are complete? You enable GL_LIGHT0 but this is not enough. You must also enable GL_LIGHTING. To get rid of the rotation effect, try putting gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer); before mesh.draw() in onDrawFrame().
UPDATE Sorry, i wanted to say to put it right after glLoadIdentity().
Other thing which is not related to lighting is that between glLoadModelview and mesh.draw() you are not setting up the projection matrix to obtain the 3d perspective effect.