好的,这是我的问题,我对所有类型的线程感到困惑asyntask处理程序wait()runnables worker我不知道android还有多少其他事情要执行任务&#34 ;不"立即或在实时"。
我想做的事情基本上就是在3秒之后停止声音(我使用声音管理器)。如果我使用等待(它会阻止我的用户界面,并且还会在屏幕上弹出“未响应的消息”)。同样的事情,如果我使用同样的等待'在一个单独的线程中(我不知道为什么,它不应该,对吧?我的意思是,这是一个单独的线程的全部意义) 无论如何,我在Android中相对较新。希望你们能为我解决这个问题!
提前谢谢
答案 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开发的许多情况下都很重要。