我正在面对一个关于AsyncTasks的排除顺序的问题.
我的问题是:
假设我有2个AsyncTask实现:MyAsyncTask1和MyAsyncTask2
这是以下列方式召集的:
new MyAsyncTask1 ().execute (); new MyAsyncTask2 ().execute ();
是否保证MyAsyncTask1在MyAsyncTask2之前执行?
有一件事是肯定的,因为默认的执行器是SERIAL_EXECUTOR,它们并不执行.
问题在于执行的顺序:哪一个将先执行?
如果执行顺序未确定,那么如何执行AsyncTasks的执行顺序?
我需要的是在MyAsyncTask2之前执行MyAsyncTask1,这并不总是这样,当我在MyAsyncTask2之前调用MyAsyncTask1执行时.
我实际上是一个自定义的活动:
public abstract class CustomActivity extends Activity { @Override protected void onCreate ( Bundle savedInstanceState ) { super.onCreate ( savedInstanceState ); new MyAsyncTask2 ().execute (); } }
另一个继承自定义活动的活动:
public class MainActivity extends CustomActivity { @Override protected void onCreate ( Bundle savedInstanceState ) { new MyAsyncTask1 ().execute (); super.onCreate ( savedInstanceState ); } }
所以如果我使用MainActivity,MyAsyncTask1应该在MyAsyncTask2之前执行,至少这是我需要的行为.
解决方法
确保两个线程(这是AsyncTasks基本上是这样)的唯一方法是按照你想要的顺序执行,是在第一个线程完成时启动第二个线程.
在你的情况下,为了保持实现抽象,并不需要在AsyncTask1的onPostExecute中实际调用AsyncTask2(Anup和Sanket建议的方式,如果要混合它们也是可以的),使AsyncTask1调用super.executeAsyncTask2(),其中executeAsyncTask2()是您的CustomActivity中启动第二个AsyncTask的方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。