2014-10-28 74 views
2

我测试的旧的应用程序我创建了一个前一阵子。该应用程序正在研究光纤WiFi,但如果我使用正常的3G连接,该应用会以信号6虚拟机错误崩溃。我试着隔离这个问题,发现它是由setVideoURI方法引起的。setVideoURI导致致命信号6(SIGABRT)

这里是我的代码:

@Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

     if (videourl != null && videourI != null 
       && extracted.contains(".mp4")) { 
      videoview.setOnPreparedListener(MainActivity.this); 
      mc = new MediaController(MainActivity.this); 
      mc.setMediaPlayer(videoview); 
      videoview.setVideoURI(videourI); 
      videoview.start(); 
      save.setOnClickListener(MainActivity.this); 
     } 

这个问题似乎在我的Moto G的同4.4.4只存在。这是一个已知的问题?是否有解决方法?

+2

您应该添加堆栈跟踪与本地位以及。 – auselen 2014-11-05 07:54:59

回答

1

VideoView.setVideoURI()启动媒体播放一个新的线程,但它是媒体解码部这引起额外的延迟。所以尝试在单独的Thread上运行该方法。

if (videourl != null && videourI != null && extracted.contains(".mp4")) 
{ 
    videoview.setOnPreparedListener(MainActivity.this); 
    mc = new MediaController(MainActivity.this); 
    mc.setMediaPlayer(videoview); 
    new Thread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      videoview.setVideoURI(videourI); // make videoView final 
      runOnUiThread(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        videoview.start(); 
        save.setOnClickListener(MainActivity.this); 
       } 
      }); 
     } 
    }).start(); 
} 
+0

现在我得到这个错误:11-05 23:03:06.404:E/AndroidRuntime(4954):了java.lang.RuntimeException:无法里面)线程已经不叫Looper.prepare( – 2014-11-05 22:04:56

+0

创建处理程序尝试使用runOnUiThread( )来包装线程。 – Robert 2015-01-23 04:44:15