I think the problem is that your code is blocking (pulseIn(), for example) and you are not using interrupts to read the GPS.
Try setting usingInterrupt true:
// this keeps track of whether we're using the interrupt
// off by default!
boolean usingInterrupt = false;