已更新。
根据建议,我决定在新线程中运行媒体播放器。因为只有当屏幕上有 Activity 时我才需要媒体播放器。这是新代码:
首先,我的公共(public) 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 工作起来更流畅了一些。
最佳答案
您的媒体播放器实例将驻留在主线程上,即 UI 线程。不建议这样做。
我可能会创建一个服务来创建一个保存媒体播放器的新线程。然后,您的每个 Activity 都可以绑定(bind)到服务来控制媒体播放器。
参见Extending the service class部分.
您还可以查看the media player sample .
关于java - 一个公共(public)媒体播放器类可用于所有 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730394/