【问题标题】:How can I make the function to wait before calling itself如何让函数在调用自身之前等待
【发布时间】:2020-05-01 11:03:18
【问题描述】:

Java、Android Studio

我有一个发牌的功能,直到每个人都拿到牌。我想在发牌时播放声音,并且我想停止该功能 1 或 2 秒,所以看起来如果我在 0.1 秒内发完所有牌。 我已经试过了:

Thread.sleep();

我不想冻结我的应用程序,我只想让递归函数在调用自身之前等待。

【问题讨论】:

  • 查看Handler.postDelayed
  • 不要使用应用程序的主线程或 UI 线程并处理后台线程,您可以休眠该线程,这样应用程序就不会冻结。
  • 除了给线程增加延迟之外,没有更好的解决方案吗?就像使用 Asyn 进程一样。

标签: java android function recursion time


【解决方案1】:

您可以使用 Handler().postDeleyed() 播放声音并在 Handler 中停止。一个抽象的例子是这样的:

//code to play sound
new Handler().postDelayed(new Runnable(){
     @Override
     public void run(){
          //stop the sound
     }
}, 1000); // 1000 is in millisec which means 1 seconds.

例如这段代码将在 1 秒后播放和暂停音乐:

final MediaPlayer player = new MediaPlayer();
AssetFileDescriptor afd = 
   this.getResources().openRawResourceFd(R.raw.hangout_ringtone);
player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), 
afd.getLength());
afd.close();
player.setAudioStreamType(AudioManager.STREAM_ALARM);
player.prepare();
player.start();
new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                mMediaPlayer.stop();
            }
        }, 1000);//millisec.

【讨论】:

  • 谢谢,这就是我正在寻找的答案!
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 2020-07-18
相关资源
最近更新 更多