Android Asynctask一般理解问题

时间:2014-02-14 16:24:51

标签: android android-asynctask android-activity

Android Asynctask一般理解问题。

  1. 如果我想制作Asynctask SyncTask,我该怎么做?

    AsyncTask A = new AsyncTask(); AsyncTask B = new AsyncTask(); A.execute(); B.execute();

  2. 如果我希望A在B开始之前完成,我应该怎么做?

    1. 如果我关闭一个Activity,那么对该活动的AsyncTask调用是否会被破坏?
    2. 如果我关闭整个应用程序,该应用程序上的AsyncTask调用是否会被破坏?

3 个答案:

答案 0 :(得分:1)

在A

的onPostExecute()中调用b.execute()

答案 1 :(得分:0)

AsyncTask是一个抽象类,因此您必须对其进行扩展,以便为其添加应用程序特定的功能。您可以实现doInBackground()方法来执行所需的工作。 AsyncTask documentation详细解释了它。我将简要回答你的每一个问题。

  

如果我想制作Asynctask SyncTask,我该怎么做?

您有正确的想法创建异步任务,但正如我之前提到的那样,您必须将异步任务子类化以实际执行某些工作。
这是一个例子(请注意,Void类型确实有意义,但documentation非常详细地介绍它们)

   public class MyTask extends AsyncTask<Void, Void, Void>
    {
        //This method will run on the back ground thread
        @Override
        protected Void doInBackground(Void... params)
        {

           // All the heavy work should be done here e.g. 
           // loading from network, database etc.
            return null; 
        }
    }

然后在您的活动中,您将按如下方式创建并运行此任务:

  MyTask myTask = new MyTask();
  myTask.execute()
  

如果我希望A在B开始之前完成,我应该怎么做?

正如文件所述:

  

首次引入时,AsyncTasks在单个上串行执行   背景线程。从DONUT开始,这被改成了一个池   允许多个任务并行运行的线程。从...开始   HONEYCOMB,任务在单个线程上执行以避免常见   并行执行导致的应用程序错误。

这意味着如果您使用的是蜂窝或以后的异步任务将在单个线程上运行。因此,如果按顺序执行,通常A应该在B之前执行。但我会这样做:启动A,然后当A的onPostExecute()被调用时,你知道A已经完成,你可以从这个方法开始你的任务B,以确保A在B之前结束。

  

如果我关闭一个Activity,那么对该活动的AsyncTask调用是否会得到   破坏?

这个问题的简短回答是否定的。即使活动已经调用了destroy,异步任务也将继续运行。但是,如果异步任务与活动生命周期相关联,则需要确保在活动终止时结束任务,否则您将遇到问题。

  

如果我关闭整个应用程序,AsyncTask会调用它   应用程序被破坏?

我对这一点并不是100%肯定。我认为这种行为是未指定的,因为现在由Android来收集资源。如果资源不足或可能没有,它可能决定立即终止任务。但是你应该避免这种设计。如果您需要在应用程序关闭后运行某些内容,请查看Service类。

答案 2 :(得分:0)