I don't have a galaxy at hand, but I see a couple of things wrong with your example.
new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION, 8000,
First you initialize the AudioRecord at a samplerate of 8000 Hz. As per documentation, only 44100 is guaranteed available. The 8000 Hz samplerate might simply not be there. So you should check whether the AudioRecord is in a correct state by. That is:
mAudioRecord.getState()==STATE_INITIALIZED
You also might want to check the return from getMinimumBufferSize. If it is ERROR_BAD_VALUE then the parameters you passed were incorrect.
Then once done, you might want to start recording within the thread that will read the data. This is very likely not the cause of your problem, but it is often unclear what happens with audiodrivers when an overflow occured. E.g: the hardware might have produced too much data any you didn't read it fast enough. Often alsa drviers behave different depending on who made them. So, to avoid that problem, it is better to write startRecording directly before you start recording, thus in this case, within the runnable.
Once that is done you might want to check the
mAudioRecord.getRecordingState()==RECORDING_RECORDING
if it is not recording, then the driver already tells you there is a problem.
Once you're finished with recording you should also stop the device. Again, some alsa drivers have a timeout to close if you don't close them yourself, meaning that the next time you try to open them, you might simply have no access (this is of course very Linux specific).
So, at a first glance these are the avenues I would take, and my guess is that the combination samplerate/channel configuration is just not available.
Lastly, I also have a feeling that the parameter VOICE_RECOGNITION might be off. Maybe just replace it with DEFAULT. I have had some problems with this myself in the past.