Как только программа выходит из памяти, ее может быть сложно восстановить. Вы должны тщательно подумать о том, как пытаться очистить, когда это произойдет. Например, в вашем файле saveImageToExternalStorage он не очищает fOut, если в try / catch возникает исключение. Поэтому вы должны делать такие вещи, как put
OutputStream fOut = null;
вне try / catch, а затем закрывать его в блоке finally try / catch. И обратите внимание на возможность дальнейших исключений в улове блоков finally.