Android - 等待一段时间后做一些事情(非常简单)

时间:2014-03-25 22:44:35

标签: android multithreading audio

好的,这是我的问题,我对所有类型的线程感到困惑asyntask处理程序wait()runnables worker我不知道android还有多少其他事情要执行任务&#34 ;不"立即或在实时"。

我想做的事情基本上就是在3秒之后停止声音(我使用声音管理器)。如果我使用等待(它会阻止我的用户界面,并且还会在屏幕上弹出“未响应的消息”)。同样的事情,如果我使用同样的等待'在一个单独的线程中(我不知道为什么,它不应该,对吧?我的意思是,这是一个单独的线程的全部意义) 无论如何,我在Android中相对较新。希望你们能为我解决这个问题!

提前谢谢

2 个答案:

答案 0 :(得分:0)

好的,我会回答我自己的问题以防其他人遇到这个问题

new Thread()
{
    public void run()
    {

        try
        {
            sleep(sharedPref.getInt("alarm_duration", 2000)
                    * DateUtils.SECOND_IN_MILLIS);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}.start();

你需要调用.START()而不是.RUN() - 这样你的UI就不会冻结

愚蠢的错误:)

答案 1 :(得分:0)

正如您所指出的,Android有一些专门的类以优化的方式处理此问题。

比使用纯Thread更合适的方法是使用Android的Handler类来实现此目的。

new Handler().postDelayed(new Runnable()
{

    @Override
    public void run()
    {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
}, YOUR_DELAY);

对于您希望在后台执行的较长时间运行操作,您可以使用AsyncTask

要实现在此期间定期“勾号”回调的倒计时情况,可以使用CountDownTimer

所有这些都具有以下优点:在UI线程上执行重要代码。这在Android开发的许多情况下都很重要。