我已经看到了之前问题的所有答案,但是无法理解代码对我的需求而且有点困惑。
我正在尝试同时运行两个AsyncTasks
,当我在第三课中按下按钮时,这两个executeOnExecutor
位于两个不同的类中。我理解我需要使用 new NewAppliance().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new NewChecksAndOperations().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
,但我无法理解我需要的内容和内容应该是什么。当我单独实现时,或者在按下按钮时执行的第三个类中,我是否同时使用这两个类。
我正在执行AsyncTask的第三类代码:
HONEYCOMB
在实施这些目标的两个类中,我的目标都是@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (android.os.Build.VERSION.SDK_INT > 11)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
:
{{1}}
答案 0 :(得分:1)
事实上,你已经做得对了。
executeOnExecutor()适用于特定的AsyncTask实例,因此必须为每个实例调用 以及您希望它生效的每个AsyncTask实例。
也就是说,您可以致电:
new MyAsyncTask(..).execute(); // <---- standard
对于标准执行,或:
new MyAsyncTask(..).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
用于并行执行。
我相信您已经知道,Android&gt; = 3.0的默认执行()行为是顺序处理。 记住从UI线程实例化和执行()(或executeOnExecutor())你的AsyncTasks,
最后,我明白这不是你问题的主题,请养成包装所有问题的习惯 DEBUG测试中的StrictMode处理:
boolean isDebuggable = (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
if (isDebuggable ) {
set StrictMode here..
}
BR&GT; 您不希望在您的用户上运行StrictMode测试......
修改强>
要测试固定池执行程序(而不是AsyncTask),请执行以下操作:
ExecutorService pool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 2; i++) {
pool.execute(new Runnable() {
public void run() {
// do something with no UI access!
}
});
}