while循环里面的try-catch阻止导致app崩溃

时间:2014-01-04 13:13:43

标签: android multithreading while-loop try-catch

我的线程的run()方法在try-catch块中有while循环,如下所示:

 try{
    while(true){    
       // some code here 
       if(condition) 
           break;
       else
           //more code here
    }   
 }catch(Exception e){..}

我认为代码没有进入无限循环,因为:

  1. 我的if条件保证在一些迭代后导致循环中断。

  2. 由于catch块在while循环之外,while循环中的任何异常都会导致循环中断。

  3. 一旦我启动线程,应用程序崩溃。

    我已经完成了这个post,但上面的代码仍然不清楚是什么错误。

    这是我的完整运行方法:

    private static final int AUDIO_SOURCE=MediaRecorder.AudioSource.MIC;
    private static final int SAMPLE_RATE_IN_HZ=44100;
    private static final int CHANNEL_CONFIG=AudioFormat.CHANNEL_IN_MONO;
    private static final int AUDIO_FORMAT=AudioFormat.ENCODING_PCM_16BIT;
    
        public void run() {
                    //writing to AudioTrack object using 512kB buffer
                    int buffSize=512*1024; //512kb = 512*1024 B 
                    byte[] buff=new byte[buffSize];
                    int fileSize=(int)outputFile.length(); //outputFile=.PCM file
                    int bytesRead=0,readCount=0;
                    FileInputStream fin=null;           
                    try {
                        fin = new FileInputStream(outputFile);
                    }catch(Exception e){}
    
                    int TrackBufferSizeInBytes=android.media.AudioTrack.getMinBufferSize(SAMPLE_RATE_IN_HZ, CHANNEL_CONFIG,AUDIO_FORMAT); 
    
                    //create AudioTrack object
                    AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC,SAMPLE_RATE_IN_HZ,CHANNEL_CONFIG,
                    AUDIO_FORMAT, TrackBufferSizeInBytes, AudioTrack.MODE_STREAM); 
    
                    at.play();
    
                    try{
                        while(bytesRead<fileSize){  
                            readCount=fin.read(buff,0,buffSize);
                            if(readCount==(-1)) // if EOF is reached 
                                break;
                            else{
                                at.write(buff, 0, readCount); //write read bytes to Track
                                bytesRead+=readCount; 
                            }
                        }
                        at.stop();
                        at.release();
                        at=null;
                        fin.close();
                    }catch(Exception e){}
                }
    

    请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该在catch块中使用printStackTrace()方法,它将显示在哪行代码上生成的Exception!

尝试在catch块中使用它:

e.printStackTrace();

或者你可以插入断点和&amp;调试代码以查看其行为

或者您也可以使用Log&amp;查看Logcat中变量的值