3

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

我想执行显示AsyncTask后的活动。我想在执行之前向用户展示一些东西AsyncTask

我读过不建议AsyncTaskonCreate().

AsyncTask我必须在哪里执行onStart()or onResume()

我想在执行之前留出足够的时间来显示活动。

4

4 回答 4

11

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

在此处输入图像描述

但是,如果您希望 AsyncTask 在所有Views 都被充气并绘制到屏幕上之后启动,那么您需要将代码放入:

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

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

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

这会从视图中拉出一个ViewTreeObserver并添加一个侦听器,当视图完成绘制到屏幕时将调用该侦听器。保留“removeGlobalOnLayoutListener()”行很重要,因为这将在每次绘制视图时停止代码触发。

于 2012-04-18T08:50:09.377 回答
1

答案在onResume()

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

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

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

然后另一个问题发生了..当我去下一个活动并回来时,即使我不需要它也总是调用异步任务..

所以已经设置了一些条件,比如if(arrayList.size()==0)然后调用 asynctaskelse不要。

于 2012-04-18T09:15:28.400 回答
0

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

于 2012-04-18T08:50:27.663 回答
-2

实现一个View对象并覆盖onDraw().
这样您就可以准确地知道用户何时可以看到第一个屏幕

于 2012-04-18T08:46:39.843 回答