Android IjkPlayer内存泄漏问题,退出播放的acrivity过段时间闪屏到主页(求大神帮助)。报如下错误:
A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'release' not called
at dalvik.system.CloseGuard.open(CloseGuard.java:184)
at android.view.Surface.setNativeObjectLocked(Surface.java:433)
at android.view.Surface.<init>(Surface.java:136)
at com.dou361.jjdxm.ijkplayer.widget.TextureRenderView$InternalSurfaceHolder.openSurface(TextureRenderView.java:199)
at com.dou361.jjdxm.ijkplayer.widget.TextureRenderView$InternalSurfaceHolder.bindToMediaPlayer(TextureRenderView.java:172)
at com.dou361.jjdxm.ijkplayer.widget.IjkVideoView.bindSurfaceHolder(IjkVideoView.java:765)
at com.dou361.jjdxm.ijkplayer.widget.IjkVideoView.openVideo(IjkVideoView.java:462)
at com.dou361.jjdxm.ijkplayer.widget.IjkVideoView.access$30(IjkVideoView.java:365)
at com.dou361.jjdxm.ijkplayer.widget.IjkVideoView$7.onSurfaceCreated(IjkVideoView.java:799)
at com.dou361.jjdxm.ijkplayer.widget.TextureRenderView$SurfaceCallback.onSurfaceTextureAvailable(TextureRenderView.java:268)
at android.view.TextureView.getHardwareLayer(TextureView.java:385).......

解决方案 »

  1.   

    在onDestroy里添加 stop 、release的命令
      

  2.   

    在onDestroy里添加 stop 、release的命令也没用的。
      @Override
        protected void onDestroy() {
            super.onDestroy();
            if (player != null) {
                player.onDestroy();
            }
        }    public PlayerView onDestroy() {
            orientationEventListener.disable();
            mHandler.removeMessages(MESSAGE_RESTART_PLAY);
            mHandler.removeMessages(MESSAGE_SEEK_NEW_POSITION);
            videoView.stopPlayback();
            return this;
        }   /**
         * 停止视频
         */
        public void stopPlayback() {
            if (mMediaPlayer != null) {
                mMediaPlayer.stop();
                mMediaPlayer.release();
                mMediaPlayer = null;
                mCurrentState = PlayStateParams.STATE_IDLE;
                mTargetState = PlayStateParams.STATE_IDLE;
                AudioManager am = (AudioManager) mAppContext.getSystemService(Context.AUDIO_SERVICE);
                am.abandonAudioFocus(null);
            }
        }
      

  3.   

    引用的别人的Demo,Demo本身onDestroy时就调用了stop 、release的命令。Demo单纯的视频播放没用出现内存泄漏情况。整合到自己的项目的时候,出现了内存泄漏情况。