0

我目前在我的应用程序中启用了ScrictMode,以确定我可以在UI线程中缓解工作的位置,并且当前创建新的FileInputStream实例时我正在获取onReadFromDisk FileInputStream违规,然后用它来设置我的MediaPlayer的数据源。我创建了一个单独的线程将文件加载到FileInputStream实例中,并设置了我的MediaPlayer的数据源,但是当我尝试创建FileInputStream实例时,ScrictMode仍在报告存在onReadFromDisk冲突。代码如下:AndroidBlockGuardPolicy.onReadFromDisk FileInputStream违规

final Handler uiHandler = new Handler(Looper.getMainLooper()); 

Thread loadInputStream = new Thread(new Runnable() { 

       @Override 
       public void run() { 

        try { 

         if (m_mediaPlayer == null) 
          m_mediaPlayer = new MediaPlayer(); 

         FileInputStream fileInputStream = new FileInputStream(path); 
         m_mediaPlayer.setDataSource(fileInputStream.getFD()); 

         fileInputStream.close(); 

         m_mediaPlayer.setOnErrorListener(MainActivity.this); 
         m_mediaPlayer.setOnPreparedListener(MainActivity.this); 
         m_mediaPlayer.setOnCompletionListener(MainActivity.this); 

         m_mediaPlayer.prepare(); 

        } catch (final Exception e) { 

         uiHandler.post(new Runnable() { 
          @Override 
          public void run() { 
           LogException(e.getMessage() + " (path == " + path + ")", "playVideo()"); 
          }       
         }); 
        } 
       }    
      }); 


loadInputStream.run(); 

我有一个走一走,看一看,发现另一篇文章这说明我应该重新设置StrictMode线程策略 - 我试过,但我仍然收到这个违规报告。

这是logcat的ScrictMode报告的样子:

at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1107) 
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:106) 
at libcore.io.IoBridge.open(IoBridge.java:400) 
at java.io.FileInputStream.<init>(FileInputStream.java:78) 
at java.io.FileInputStream.<init>(FileInputStream.java:105) 
at com.subdc.subdcmain.MainActivity$6.run(MainActivity.java:440) 
at java.lang.Thread.run(Thread.java:856) 
at com.subdc.subdcmain.MainActivity.playVideo(MainActivity.java:467) 

任何想法,以什么我要去我错了吗?

非常感谢。

回答

1

你必须start()的线程。如果你只是在主线程中调用run(),一切都将在主线程中执行

+0

非常感谢您的及时回应,迈克尔。 这样做:) – tony

3

要启动线程,请致电start(),而不是run()。现在,您只需在当前线程上运行run()方法。

+0

感谢您对墨菲先生的及时回应,我接受了迈克尔的回答,因为他首先到达了那里:)。 (并感谢真棒GitHub回购,我从他们学到了一个疯狂的金额) – tony

+0

@tony:“我接受迈克尔的答案,因为他首先到达那里” - 没问题。 “并感谢真棒GitHub回购” - 非常欢迎您! – CommonsWare

+2

看起来像@CommonsWare先到那里? – Marty