使用带有ListActivity的AsyncTask显示加载屏幕



我有一个应用程序,它使用ListActivity为用户提供操作列表。当他们点击一个时,我使用Intent来启动一个单独的活动。

我的问题是,应用程序执行的操作大约需要20秒才能完成,由于我不希望用户收到那个讨厌的ANR对话框,我尝试使用AsyncTask同时向他们显示加载屏幕。我尝试在onPreExecute()上使用setContentView(R.layout.loading);,但它抛出了一个NullPointerException,据我所知,这是因为loading.xml不是"ID为android.R.id.list的ListView"。

那么我现在该怎么办呢?如何显示加载屏幕?有办法解决这种令人讨厌的情况吗?如有任何帮助,我们将不胜感激。谢谢

我不确定您的用例到底是什么;您有一个立即填充的项目列表,并且在选择一个项目后会采取行动吗?所采取的操作是启动另一个执行后台处理的"活动"?

或者填充操作列表需要那么长时间吗?

如果是前者,您可以对长时间运行的活动使用AsyncTask,而不是Intent来启动另一个活动:在单击有问题的项目时得到的回调中,您将创建AsyncTask;在doInBackground中,您可以执行长时间运行活动,onPostExecute根据需要刷新或操纵您的列表。

另一件需要考虑的事情是,如果在启动新的"活动"之前需要进行加载,则使用对话框显示加载屏幕。

如果你能进一步描述你的用例,我可以帮你更多。

这不是AsyncTask上需要的加载屏幕,而是20秒的"活动"初始化。我想寻找一种方法,在服务的后台线程中完成所有设置,同时用户可以在其他活动中愉快地四处走动。我会努力找到一种方法,不只是拖延用户20秒。也许可以将他们带到目标"活动",并向他们显示上次访问时缓存的数据,直到新集合准备好为止。

在被调用的活动的onCreate()中启动并显示加载对话框,然后在AsyncTask的onPostExecute()中调用Dialog.dispense()。

最新更新