我正在开发一个 Android 3.1 应用程序。
我想执行显示AsyncTask
后的活动。我想在执行之前向用户展示一些东西AsyncTask
。
我读过不建议AsyncTask
在onCreate()
.
AsyncTask
我必须在哪里执行onStart()
or onResume()
?
我想在执行之前留出足够的时间来显示活动。
我正在开发一个 Android 3.1 应用程序。
我想执行显示AsyncTask
后的活动。我想在执行之前向用户展示一些东西AsyncTask
。
我读过不建议AsyncTask
在onCreate()
.
AsyncTask
我必须在哪里执行onStart()
or onResume()
?
我想在执行之前留出足够的时间来显示活动。
onCreate()
,onStart()
并且onResume()
是操作系统调用的生命周期方法,不应直接调用。但是,您可以覆盖它们以在活动生命周期的这些阶段执行您的代码:
但是,如果您希望 AsyncTask 在所有View
s 都被充气并绘制到屏幕上之后启动,那么您需要将代码放入:
toReturn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
public void onGlobalLayout() {
toReturn.getViewTreeObserver().removeGlobalOnLayoutListener(this);
// asyncTask.execute();
}
});
在上面的示例toReturn
中是 onCreate() 方法中的一个视图。它可以是您喜欢的任何视图。
这会从视图中拉出一个ViewTreeObserver
并添加一个侦听器,当视图完成绘制到屏幕时将调用该侦听器。保留“removeGlobalOnLayoutListener()”行很重要,因为这将在每次绘制视图时停止代码触发。
答案在onResume()
我在我的活动中有同样的要求,我需要显示一些带有其他按钮和图像的列表。列表正在从服务器获取数据,因此使用 AsyncTask 来实现。
但在此之前需要显示空列表视图和屏幕的其他部分..
所以首先当它转到onCreate()
我设置empty arraylist
为listview的适配器然后onResume()
调用Asynctask并在该任务中填充ArrayList并调用adapter.notifyDataSetChanged()
然后另一个问题发生了..当我去下一个活动并回来时,即使我不需要它也总是调用异步任务..
所以已经设置了一些条件,比如if(arrayList.size()==0)
然后调用 asynctaskelse
不要。
您可以将您的代码放在 onWindowsFocusChanged 方法中。您可以使用其中的线程来管理计时器以启动您的特定异步任务。请注意,每次您的活动获得焦点时都会执行此操作,而不仅仅是您第一次启动活动时(我不知道这对您来说是否有问题)。
实现一个View
对象并覆盖onDraw()
.
这样您就可以准确地知道用户何时可以看到第一个屏幕