diff --git a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
index 0277338..af62105 100644
--- a/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
+++ b/tests/tests/security/src/android/security/cts/MediaRecorderInfoLeakTest.java
@@ -19,6 +19,7 @@
 import android.platform.test.annotations.SecurityTest;
 import android.media.MediaRecorder;
 import android.test.AndroidTestCase;
+import android.util.Log;
 
 import java.io.File;
 
@@ -32,24 +33,46 @@
     public void test_cve_2016_2499() throws Exception {
         MediaRecorder mediaRecorder = null;
         long end = System.currentTimeMillis() + 600_000; // 10 minutes from now
+        String TAG = "MediaRecorderInfoLeakTest";
+        boolean recorderPrepare = false;
+        int retryCount = 2;
+
         try {
             while(System.currentTimeMillis() < end) {
-                mediaRecorder = new MediaRecorder();
-                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
-                mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
-                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
-                mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
-                mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
-                mediaRecorder.setVideoFrameRate(30);
-                mediaRecorder.setVideoSize(352, 288);
-                mediaRecorder.setOutputFile(
-                        new File(getContext().getFilesDir(), "record.output").getPath());
-                mediaRecorder.prepare();
-                int test = mediaRecorder.getMaxAmplitude();
-                mediaRecorder.reset();
-                mediaRecorder.release();
-                if(test != 0){
-                    fail("MediaRecorderInfoLeakTest failed");
+                recorderPrepare = false;
+                for (int i = 0; i < retryCount; i++) {
+                    try {
+                        mediaRecorder = new MediaRecorder();
+                        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
+                        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
+                        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+                        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
+                        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
+                        mediaRecorder.setVideoFrameRate(30);
+                        mediaRecorder.setVideoSize(352, 288);
+                        mediaRecorder.setOutputFile(
+                                new File(getContext().getFilesDir(), "record.output").getPath());
+                        mediaRecorder.prepare();
+                        recorderPrepare = true;
+                        break;
+                    } catch (Exception ex) {
+                        Log.w(TAG, "Media Recorder Prepare Exception" + ex.getMessage());
+                        Thread.sleep(200);
+                    } finally {
+                        if (recorderPrepare == false && mediaRecorder != null){
+                            mediaRecorder.release();
+                        }
+                    }
+                }
+                if(recorderPrepare){
+                    int test = mediaRecorder.getMaxAmplitude();
+                    mediaRecorder.reset();
+                    mediaRecorder.release();
+                    if(test != 0){
+                        fail("MediaRecorderInfoLeakTest failed");
+                    }
+                } else {
+                    fail("Media Recorder prepare fail");
                 }
             }
         } catch (Exception e) {
