我有一个活动,应该在某些事件发生时播放声音。代码非常像这样:
public class MyActivity extends AppCompatActivity
{
private MyActivityRunnable _myActivityRunnable;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_myactivity);
_myActivityRunnable = new MyActivityRunnable (this);
}
public void reactOnEvent()
{
runOnUiThread(_myActivityRunnable);
}
}
MyActivityRunnable类代码如下:
public class MyActivityRunnable implements Runnable
{
private MyActivity _myActivity;
private MediaPlayer _beep;
public MyActivityRunnable (MyActivity myActivity)
{
_myActivity = myActivity;
_beep = MediaPlayer.create(timerActivity, R.raw.beep);
}
@Override
public void run()
{
//Do some stuff here
_beep.start();
}
}
MyActivity从其他活动启动(我们将其称为StartActivity)。首先调用以下代码
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);
用户可以通过调用相同的代码从MyActivity导航回到StartActivity:
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
那样做就没有问题。
但是,如果我从StartActivity导航到MyActivity,然后使用电话上的“后退”按钮向后导航,然后以常规方式再次启动MyActivity,则声音将播放两次。如果我重复一遍,它将播放3次,依此类推。
有人可以帮助我理解为什么吗?
编辑
我设法通过使MediaPlayer字段为静态并在创建它之前在OnCreate方法中检查它是否为null来绕过声音问题。丑,我知道。经过一些调试后,我发现MyActivityRunnable的运行方法被多次调用。好像那里有一些悬挂的参考文献。但是,我不知道如何清除它们。同样,如果开始新活动,则运行仅被调用一次。