【问题标题】:Mediaplayer and finish() method媒体播放器和完成()方法
【发布时间】:2012-09-17 23:14:05
【问题描述】:

我只是在 android 中测试媒体播放器,我在 onCreate 方法中启动了一个流,并且我有一个调用 finish() 方法的按钮。单击按钮后,即使活动已关闭,我仍然可以听到流播放的声音,我想知道这是否是某种泄漏,我必须在调用 finish() 方法之前先停止播放器,或者如果 finish()方法实际上并没有完全杀死应用程序以释放资源。感谢阅读

            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button add_function,exit_btn;   
            add_function = (Button) findViewById(R.id.view_chat);
            exit_btn = (Button) findViewById(R.id.exit_btn);


            MediaPlayer mp = new MediaPlayer();
            String URL_OF_FILE = "http://stream.radiosai.net:8002/";
    try {
        mp.setDataSource(URL_OF_FILE);
         mp.prepare();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

            mp.start();



        exit_btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });
             }// EOF ONCREATE

【问题讨论】:

  • 请出示代码。您在哪里声明 MediaPlayer 实例?
  • 我将编辑我的主要帖子以包含此内容

标签: java android


【解决方案1】:

调用finish() 不会终止应用程序,它只会破坏您正在完成的当前Activity。虽然我认为完成 Activity 会停止 MediaPlayer,但在这种情况下您可能应该做的是覆盖 onDestroy(),并在那里释放您的 MediaPlayer 对象。例如:

@Override
public void onDestroy() {
    if(mediaPlayer != null) mediaPlayer.release();
    super.onDestroy();
}

【讨论】:

  • 我猜你应该在调用父母的 onDestroy 之前释放 mediaPlayer?
  • 也只是快速清理一下,这是一种有效的方法吗?还是只是为了解决我的问题?这确实让我感到惊讶,以及为什么活动被关闭并且流仍在继续,这就是我问这个问题的原因。
  • @manavo 可能是这样,经过编辑以反映这一点。 :) kabuto178,高效吗?我的意思是没有什么低效,但你到底是什么意思?通常,如果您要释放这样的资源,您会在相应的结束事件中进行(例如 onCreate()onDestroy()onResume()onPause()
  • 我宁愿在 onPause 或 onStop 中停止媒体播放器
  • @njzk2 如果你这样做,那么你还想分别在onResume()onStart() 中初始化 MediaPlayer,否则你最终会出现看似随机的异常。例如,如果 Activity 停止然后恢复(在调用 onDestroy() 之前),那么您将尝试使用您已经发布的 MediaPlayer 而不重新初始化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多