顺序执行修改UI的操作

时间:2016-07-08 13:18:17

标签: android android-asynctask ui-thread android-priority-jobqueue

Asynctask正在进行实际工作,AsyncTask会返回结果。用户需要视觉提示,了解幕后发生的事情,包括按顺序完成多个独立的UI修改。 UI修改涉及动画,因此队列中的下一个作业必须等待当前作业的动画完成。 [序列不固定,但根据AsyncTask收到的结果而有所不同。]

网络访问等所有繁重工作都是由AsyncTask完成的,我正在寻找一种更好的方法来顺序修改用户界面。

我目前的方法: 目前我正在使用https://github.com/yigit/android-priority-jobqueue

当UI修改完成后,它会在eventbus上发送事件,jobManager已启动[当job的{​​{1}}被调用时会停止。

我目前在onRun的{​​{1}}内的UI处理程序上发帖。 它工作正常,但该库设计用于写入磁盘和长时间运行的操作,而不是UI操作。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:-1)

将您的UI修改放在AsyncTask的 onPostExecute 方法中,它默认在UI线程上运行,因此您可以在doInBackground中完成整个加载后从那里更新它。

如果您想立即在 doInBackground 中执行此操作,请在该方法中使用以下方法。

 runOnUiThread(new Runnable(){

  public void run(){

  //your ui updations here
  }

});

为每个动画设置一个动画侦听器,并使用onAnimationEnd在此处触发下一个动画:

fadeInAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {
   //trigger next animation here to make it sequential
}

@Override
public void onAnimationRepeat(Animation animation) {

}
});

这将有助于批处理和维护动画序列

答案 1 :(得分:-1)

我强烈建议您使用RxJava

  • 你将摆脱AsyncTask
  • 你的Logik看起来有点困难,你想在不同的线程之间跳转。 RxJava将为您提供很多帮助。

提示:您还应该使用Retrolambda使RxJava成为您的代码清洁工。