活动com.exe.sample漏掉了IntentReceiver android.media.MediaPlayer$1@4123c640

时间:2015-05-22 08:11:52

标签: android android-mediaplayer android-videoview

我在我的android应用程序中有两个活动。我正在视频中播放两个活动中的视频。当我转到第二个活动时,它开始在videoview上播放视频。但当我回到之前的活动并尝试与UI交互时,我得到了:

  

java.lang.IllegalArgumentException:Receiver未注册:   android.media.MediaPlayer$1@4123c640

我也得到了:

  

活动com.exe.sample.Test1泄漏了最初在这里注册的IntentReceiver android.media.MediaPlayer$1@4123c640。你是否错过了对unregisterReceiver()的调用?

在第二项活动中。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    super.onCreate(savedInstanceState);
    Button b=(Button)findViewById(R.id.button1);
    VideoView videoview = (VideoView) findViewById(R.id.videoView1);
    videoview.setVideoURI(Uri.parse(url));
    videoview.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
            mp.start();

        }
    });
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
        startActivity(new Intent(MainActivity.this, Test1.class));
        }
    });
}

第二个活动代码:

public class Test1 extends Activity { private VideoView videoview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.tset);
    videoview = (VideoView) findViewById(R.id.videoView2);
    videoview
            .setVideoURI(Uri
                    .parse(url));
    videoview.setOnPreparedListener(new OnPreparedListener() {
        public void onPrepared(MediaPlayer mp) {
            mp.start();

        }
    });

    super.onCreate(savedInstanceState);
}

1 个答案:

答案 0 :(得分:1)

在Test1.onStop()中添加mp.release()。 日志显示' android.media.MediaPlayer$1@4123c640'是MediaPlayer的匿名内部BroadcastReceiver类,它应该在MediaPlayer.release()中取消注册。