显示Activity后执行AsyncTask

时间:2012-04-18 08:43:36

标签: android asynchronous

我正在开发Android 3.1应用程序。

我希望在显示活动后执行AsyncTask。我想在执行AsyncTask之前向用户展示一些内容。

我读过我不建议在AsyncTask上执行onCreate()

我必须在AsyncTaskonStart()执行onResume()吗?

我希望在执行之前留出足够的时间来展示活动。

4 个答案:

答案 0 :(得分:10)

onCreate()onStart()onResume()是操作系统调用的生命周期方法,不应直接调用。但是,您可以覆盖它们,以便在活动生命周期的这些阶段执行代码:

enter image description here

但是,如果您希望在所有View被夸大并绘制到屏幕之后启动AsyncTask,那么您需要将代码放入此中:

    toReturn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        public void onGlobalLayout() {
            toReturn.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            // asyncTask.execute();
        }
    });

在上面的示例中,toReturn是onCreate()方法中的视图。它可以是你喜欢的任何视图。

从视图中提取ViewTreeObserver并添加一个侦听器,当视图完成绘制到屏幕时将调用该侦听器。保持“removeGlobalOnLayoutListener()”行是很重要的,因为这将阻止代码触发每次时间绘制视图。

答案 1 :(得分:1)

答案在onResume()

我在我的活动中有同样的要求,我需要用其他按钮和图像显示一些列表。 列表从服务器获取数据,因此使用AsyncTask ...

但在此之前需要显示空列表视图和屏幕的其他部分..

首先,当它转到onCreate()时,我将empty arraylist设置为listview的适配器,然后在onResume()中调用Asynctask并在该任务中填充ArrayList并调用adapter.notifyDataSetChanged()

然后又出现了另一个问题......当我进入下一个活动并回来时,即使我不需要它也总是调用asynctask ...

所以放了一些像if(arrayList.size()==0)这样的条件,然后调用asynctask else

答案 2 :(得分:0)

您可以将yur代码放在onWindowsFocusChanged方法中。您可以使用其中的线程来管理计时器以启动您的特定异步任务。 请注意,每次您的活动都有焦点时都会执行此操作,而不仅仅是您第一次启动活动时(我不知道这对您来说是否有问题)。

答案 3 :(得分:-2)

实施View对象并覆盖onDraw() 这样你就可以确切地知道用户可以看到第一个屏幕的时间