【发布时间】:2012-11-05 08:00:03
【问题描述】:
我遇到了关于 AsyncTasks 执行顺序的问题。
我的问题是:
假设我有 2 个 AsyncTask 实现:MyAsyncTask1 和 MyAsyncTask2
按以下方式调用:
new MyAsyncTask1 ().execute ();
new MyAsyncTask2 ().execute ();
是否保证 MyAsyncTask1 在 MyAsyncTask2 之前执行? 可以肯定的一件事是,它们不会并行执行,因为使用了默认执行程序,即 SERIAL_EXECUTOR。 问题在于执行顺序:哪个先执行??
如果执行顺序未确定,如何强制执行 AsyncTasks 的执行顺序??
我需要在 MyAsyncTask2 之前执行 MyAsyncTask1,但情况并非总是如此,尽管我之前为 MyAsyncTask1 调用了执行MyAsyncTask2。
我实际上拥有的是一个自定义活动:
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 之前执行,至少这是我需要的行为。
【问题讨论】:
-
从 MyAsyncTask1 的
onPostExecute启动 MyAsyncTask2,然后始终在 MyAsyncTask2 之前执行 MyAsyncTask1 -
您好 imran khan,感谢您的建议,但由于我的设计,这是不可能的。我根本不想调用 MyAsyncTask1 的其他活动(使用继承)使用 CustomActivity(和 MyAsyncTask2)。
-
然后只需将 Activity 名称传递给您希望从中启动 MyAsyncTask2 的 CustomActivity(和 MyAsyncTask2)构造函数,或者将 null 用于您不想启动 MyAsyncTask2 的其他活动
-
或者您可以在 CustomActivity(和 MyAsyncTask2)中使用
context.getPackageManager().getClass();来获取用户当前查看的活动的名称