Asynctask
正在进行实际工作,AsyncTask
会返回结果。用户需要视觉提示,了解幕后发生的事情,包括按顺序完成多个独立的UI修改。 UI修改涉及动画,因此队列中的下一个作业必须等待当前作业的动画完成。 [序列不固定,但根据AsyncTask
收到的结果而有所不同。]
网络访问等所有繁重工作都是由AsyncTask
完成的,我正在寻找一种更好的方法来顺序修改用户界面。
我目前的方法: 目前我正在使用https://github.com/yigit/android-priority-jobqueue
当UI修改完成后,它会在eventbus上发送事件,jobManager
已启动[当job
的{{1}}被调用时会停止。
我目前在onRun
的{{1}}内的UI处理程序上发帖。
它工作正常,但该库设计用于写入磁盘和长时间运行的操作,而不是UI操作。有没有更好的方法呢?
答案 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!
提示:您还应该使用Retrolambda使RxJava成为您的代码清洁工。