【发布时间】:2022-03-07 18:03:46
【问题描述】:
我有一个扩展 BaseActivity 的 Activity,其中在 BaseActivity 中它还创建一个线程,以便在不同线程中的所有活动中播放 MediaPlayer,这是我的代码:
在我的 MainActivity 中:
public class MainActivity extends BasedActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
beginBGMusic();
}
}
在我的 BasedActivity 中:
public class BasedActivity extends AppCompatActivity {
MediaPlayer BGMusicPlayer;
Thread BGMusic;
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
protected void beginBGMusic(){
BGMusic = new Thread(){
public void run(){
BGMusicPlayer = MediaPlayer.create(this,R.raw.music.mp3);
}
};
BGMusic.start();
}
}
但是,MediaPlayer.create() 需要一个上下文,我不明白如果它在线程中并且在不同的类中,我应该如何设置上下文。
有人知道如何用我的方法解决问题吗?
谢谢!
【问题讨论】:
-
如果您的要求是在多个活动中使用相同的媒体播放器,那么您应该在服务中创建它,而不是在线程内启动媒体播放器,并且可以跨多个活动访问单个媒体播放器实例。
-
在线程中创建它是否会破坏让媒体播放器跨活动播放的想法? @Avi
-
如果你想使用线程,那么创建一个 Singlton 类,这样你就不需要每次都创建线程,因为你在 BaseActivity 中有线程,所以每次启动一个新活动时,新线程都会已创建。
-
但最好的方法仍然是使用服务而不是线程。
-
你能给我一个单例类的例子吗?另外,我如何从不同类中的线程中获取上下文?