Android-Runnable run()函数不起作用



我正在开发一个android应用程序,扩展活动并实现Runnable。

问题是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线程会因为sleep方法而冻结屏幕,那么我应该如何让Run方法运行呢?

谢谢!

您必须在Android中使用AsyncTask

执行步骤:

  • 创建一个扩展AsyncTask的嵌套类
  • 实现doInBackground方法,您的逻辑应该驻留在该方法中
  • 在需要调用run()的嵌套类实例上调用execute方法

事实是,我不确定是否有可能停止asyntask?

您可以在AsyncTask上使用cancel()方法取消异步任务。有关此方面的更多详细信息,请参阅Android文档。

编辑

要将run()函数中的代码移动到AsyncTask,您将在onPreExecute()中放入任何"设置"UI的内容,例如创建ProgressBar。然后把你的工作放进去,比如调用sleep()和其他在doInBackground()中的UI Thread上无法完成的事情。如果您需要更新搜索栏,可以在onProgressUpdate()中通过在doInBackground()中调用publishProgress()来完成。最后,如果你需要取消ProgressBar或做一些结束UI的事情,你会在onPostExecute()中这样做。

之所以进行这种解释,是因为除了doInBackground()之外,AsyncTask的所有方法都在UI Thread上运行。

异步任务文档

Vogella:Android 中的后台任务

new Thread(this).start();

尽管处理程序或异步上的匿名内部类比使活动本身可运行要好。

最新更新