0

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

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

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

当 UI 修改完成时,它会在 eventbus 上发送事件,并开始[在调用ajobManager时停止]。jobonRun

我目前onRunJob. 它可以工作,但该库是为写入磁盘和长时间运行的操作而不是 UI 操作而设计的。有更好的方法吗?

4

2 回答 2

-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) {

}
});

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

于 2016-07-08T13:28:18.347 回答
-1

我强烈推荐你使用RxJava

  • 您将摆脱 AsyncTask
  • 你的 Logik 似乎有点困难,你想在不同的线程之间跳转。RxJava 会帮助你很多。

提示:你也应该使用Retrolambda来让 RxJava 你的代码更干净。

于 2016-07-08T13:28:25.940 回答