可以从后台线程执行AsyncTask吗?

时间:2018-04-30 10:07:34

标签: android android-asynctask

在阅读文档时,我发现必须在UI线程上加载AsyncTask类。但我很惊讶AsyncTask也可以从工作线程执行。

所以问题是:

  1. 如果AsyncTask也可以从后台线程执行,为什么在文档中他们说的正好相反。

  2. 怎么可能在onPostExecute上有上下文。?

    new Thread(new Runnable() {
        @Override
        public void run() {
            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... voids) {
                    return null;
                }
    
                @Override
                protected void onPostExecute(Void aVoid) {
                    super.onPostExecute(aVoid);
                    Toast.makeText(getBaseContext(), "in AsyncTask...", Toast.LENGTH_SHORT).show();
                }
            }.execute();
        }
    }).start();
    

2 个答案:

答案 0 :(得分:0)

AsyncTask Android类允许我们将后台任务绑定到UI线程。因此,使用此类,您可以执行后台操作,然后将结果发布到更新UI组件的UI线程。

您可以简要了解AsyncTask的执行情况:http://codetheory.in/android-asynctask/

答案 1 :(得分:0)

主线程和工作线程有两个主题。 Asyntasck适用于工作线程.Mustly Asynctask用于后台Task.It适用于工作线程并在主线程上发布结果。

如果主线程阻塞5秒或更长时间,那么应用程序无响应(ANR)对话框就会出现,以避免使用Asynctask后台任务的这种情况