如何决定是否在android中使用ASyncTask?

时间:2015-12-05 01:36:22

标签: android android-asynctask

我有简单的Android ui。当用户点击button时,它会占用用户的location,然后转到4-5 websites并获取该小时内的所有事件,然后根据用户的位置,比较关闭的并且,根据给定的radius,它在新的屏幕中显示事件名称。

点击button后,它会进入another screen并写为searching for locationprogress dialoglocation identified。之后,向用户显示事件。所以我应该做3个活动和3个屏幕?

根据这里 how to use method in AsyncTask in android?

他说不喜欢asynctask用于长期的网络工作。

我不能在asynctask内使用位置方法。在执行之前我应该​​将位置发送为parameter。但需要再次使用computedistance方法。在post execute方法中,我可以将事件发布到新的ui。

但是,当用户点击该事件时,从onclick我可以完成工作,但我无法找到或retrieve该事件的信息。

我决定在这里评论之后使用asynctask并且有人回答我使用但我找不到帖子。

现在我不确定是否使用。

我需要webconnections,所以我不想让它们成为主要的。所以最好使用asynctask,但是有必要吗?

2 个答案:

答案 0 :(得分:3)

这就是我的建议:

使用AsyncTask。它将运行后台线程,并为您提供一种在每个网站选中时在UI线程中显示进度的方法。与流式传输视频相比,这不是一个“长期网络工作”。恕我直言,使用Service来做类似你的操作的东西太重了。所以先从AsyncTask开始。

然而,一旦你有了这个问题,你就会发现下一个问题,即你的网络操作可能需要足够长的时间,如果你旋转设备,Activity将被拆除并在新的方向重新创建。然后,当您的AsyncTask完成时,它应该回拨的Activity不再存在。哎呀,现在你的用户没有得到他们的结果。

我找到的最佳解决方案是使用特殊片段来“托管”AsyncTask。此片段不会创建视图,并使用setRetainInstance(true)在活动重新创建期间使片段保持活动状态。

你可以在这里阅读这个新技术:Handling Configuration Changes with Fragments

答案 1 :(得分:0)

AsyncTask是Android提供的一个抽象类,它可以帮助我们正确使用UI线程。这个类允许我们执行长/后台操作并在UI线程上显示其结果,而不必操纵线程。

Android实现单线程模型,每当启动Android应用程序时,都会创建一个线程。假设我们在按钮上执行网络操作,请单击我们的应用程序。在按钮上单击,将向服务器发出请求,并等待响应。由于android的单线程模型,等待时间响应,我们的屏幕是无响应的。所以我们应该避免在UI线程上执行长时间运行的操作。这包括文件和网络访问。