相关疑难解决方法(0)

垃圾收集导致:MediaPlayer未经发布而最终确定

经过大量的调试后我终于找到了导致此错误的原因!垃圾收集!

我在媒体视图中播放视频,在后台我正在寻找来自Rest API的新视频.

我偶尔会看到垃圾收集运行:

02-22 13:14:57.969: D/dalvikvm(16888): GC_EXPLICIT freed 152K, 4% free 6746K/6979K, paused 2ms+2ms
Run Code Online (Sandbox Code Playgroud)

直到那之后:

02-22 13:14:57.969: W/MediaPlayer-JNI(16888): MediaPlayer finalized without being released
Run Code Online (Sandbox Code Playgroud)

所以我每隔5秒就调用一次System.gc()来测试它.

一旦第一个GC被调用就会发生!

02-22 13:19:47.813: D/dalvikvm(17060): GC_EXPLICIT freed 167K, 5% free 6745K/7047K, paused 2ms+2ms ---- I call GC
02-22 13:19:47.813: W/MediaPlayer-JNI(17060): MediaPlayer finalized without being released ---- VIDEO PLAY INTERRUPTED
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我能预防吗?

播放视频:

private void playMedia(int playListIndex) throws IOException {
        File mediadir = getDir("tvr", Context.MODE_PRIVATE);
        filelist = mediadir.listFiles();
        Log.i("media player", "play media!");
        String path = filelist[playListIndex].getAbsolutePath();
        FileInputStream fileInputStream …
Run Code Online (Sandbox Code Playgroud)

android garbage-collection android-asynctask

30
推荐指数
2
解决办法
2万
查看次数

MediaPlayer onCompletion未被准确调用

在我的应用程序中,我使用MediaPlayer API 创建了一个音频播放器(仅限WAV文件).但是玩家每次都不会给onCompletion Listener回调.有时它会给出回调但不是每次都回调.我正在对wav文件进行一些音频处理,比如插入和覆盖.

是因为音频标题中有任何缺失吗?回放完成后为什么不回调?

android wav android-mediaplayer

7
推荐指数
2
解决办法
5482
查看次数

当我期望它时,onCompletion没有被调用

我在我的父类中发布了一个MediaPlayer成员变量,在我启动之后,它不会调用onCompletion,或者至少onCompletionListener没有捕获它?我的代码看起来有点效果

mediaPlayer = Mediaplayer.create(this, currentSample);
mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)

代码中的其他地方是我的onCompletionListener

mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {      
        if (repeatFlag == true) {
            handler.removeCallbacks(sampleRunnable);
            handler.postDelayed(sampleRunnable, delay);
        }
    }   
});
Run Code Online (Sandbox Code Playgroud)

我正在使用处理程序来调用sampleRunnable,因为我想以指定的延迟间隔循环它.但是,onCompletion似乎永远不会被调用.我对此非常肯定,因为我在onCompletion中设置了断点,它永远不会暂停程序,我试图单步执行它似乎永远不会被调用.有任何想法吗?

android

4
推荐指数
1
解决办法
6851
查看次数