更新。
在提出建议之后,我决定在新线程中运行媒体播放器。因为我仅在屏幕上显示活动时才需要Media Player。这是新代码:
首先,在多个类中使用了我的公共SingleMP(媒体播放器)类:
import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
public class SingleMP implements Runnable
{
public static MediaPlayer mp;
private static Context context;
private static Uri uri;
public SingleMP(Context context, Uri uri){
this.context= context;
this.uri= uri;
}
@Override
public void run(){
try {
if (mp != null) {
mp.stop();
mp.reset();
mp.release();
mp = null;
}
mp = MediaPlayer.create(context, uri);
mp.start();
} catch (Exception e) {
if (mp != null) {
mp.stop();
mp.reset();
mp.release();
mp = null;
}
e.printStackTrace();
mp = MediaPlayer.create(context, uri);
mp.start();
}
}
// Called in OnDestroy of used class.
public static void mpstop()
{
if (mp != null) {
mp.stop();
mp.reset();
mp.release();
mp = null;
}
}
}
在另一个Java类中使用它的示例:
public class MainMenu
{
private Uri uri;
private Runnable MPthread;
public void onCreate(Bundle savedInstanceState)
{
RadioButton rbtnA = (RadioButton) findViewById(R.id.radio0);
rbtnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
// Assign a sound from raw folder.
uri =Uri.parse("android.resource://"+getPackageName()+"/raw/nice");
MPthread = new SingleMP(MainMenu.this, uri));
new Thread(MPthread).start();
}
}
});
RadioButton rbtnB = (RadioButton) findViewById(R.id.radio1);
rbtnB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
// Assign a sound from raw folder.
uri =Uri.parse("android.resource://"+getPackageName()+"/raw/morning");
MPthread = new SingleMP(MainMenu.this, uri));
new Thread(MPthread).start();
}
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if(MPthread!=null) {
SingleMP.mpstop();
}
}
}
你怎么看?看来我的用户界面工作更流畅。
最佳答案
您的媒体播放器实例将驻留在主线程(即UI线程)上。不建议这样做。
我可能会创建一个将创建一个包含媒体播放器的新线程的服务。然后,您的每个活动都可以绑定到服务以控制媒体播放器。
请参阅Extending the service class部分。
您也可以查看the media player sample。