备份后,Android MediaPlayer会多次播放声音

时间:2018-07-09 17:21:57

标签: android runnable

我有一个活动,应该在某些事件发生时播放声音。代码非常像这样:

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的运行方法被多次调用。好像那里有一些悬挂的参考文献。但是,我不知道如何清除它们。同样,如果开始新活动,则运行仅被调用一次。

0 个答案:

没有答案