我正在开发一个扩展活动并实现Runnable的Android应用程序。
问题是run()函数没有启动,我不确定实现Runnable是否让它自动启动为AsyncTask?
这是我的代码
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener, Runnable {
...
@Override
public void run() {
// mediaPlayer is myMediaPlayer
// progress is my SeekBar
Log.w("Tunesto", "testabababab");
int currentPosition = 0;
int total = mediaPlayer.getDuration();
progress.setMax(total);
while (mediaPlayer != null && currentPosition < total) {
try {
Thread.sleep(1000);
currentPosition = mediaPlayer.getCurrentPosition();
} catch (InterruptedException e) {
return;
} catch (Exception e) {
return;
}
progress.setProgress(currentPosition);
Log.w("MyApp", String.valueOf(currentPosition));
}
}
}
显然如果我启动Run fro,UI Thread会因为sleep方法而冻结屏幕,那么我该如何让Run方法运行呢?
谢谢!
答案 0 :(得分:3)
您必须在Android中使用AsyncTask
。
执行步骤:
AsyncTask
doInBackground
方法execute
run()
方法
事实上,我不确定是否可以停止asyntask?
您可以使用cancel()
上的AsyncTask
方法取消异步任务。有关详细信息,请参阅Android文档。
修改强>
要将run()
函数中的代码移到AsyncTask
,您会在UI
内放置任何“设置”onPreExecute()
内容的内容,例如创建{ {1}}。然后将您的工作放在调用ProgressBar
以及sleep()
UI Thread
内无法完成的其他事情上。如果您需要更新搜索栏,可以通过拨打doInBackground()
内的onProgressUpdate()
在publishProgress()
进行更新。最后,如果您需要关闭doInBackground()
或做一些结束ProgressBar
的内容,您将在UI
中执行此操作。
这种解释的原因是onPostExecute()
的所有方法都在AsyncTask
上运行,但UI Thread
除外。
答案 1 :(得分:0)
new Thread(this).start();
虽然处理程序或异步上的匿名内部类比将活动本身设置为Runnable更好。