然而,第一个Asynctask工作,按下按钮时第二个不工作

时间:2014-07-11 13:32:41

标签: java android android-asynctask

我已经看到了之前问题的所有答案,但是无法理解代码对我的需求而且有点困惑。

我正在尝试同时运行两个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}}

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!
        }
      });
}