我有简单的Android ui
。当用户点击button
时,它会占用用户的location
,然后转到4-5 websites
并获取该小时内的所有事件,然后根据用户的位置,比较关闭的并且,根据给定的radius
,它在新的屏幕中显示事件名称。
点击button
后,它会进入another screen
并写为searching for location
或progress dialog
或location identified
。之后,向用户显示事件。所以我应该做3个活动和3个屏幕?
根据这里 how to use method in AsyncTask in android?
他说不喜欢asynctask
用于长期的网络工作。
我不能在asynctask
内使用位置方法。在执行之前我应该将位置发送为parameter
。但需要再次使用computedistance
方法。在post execute
方法中,我可以将事件发布到新的ui。
但是,当用户点击该事件时,从onclick
我可以完成工作,但我无法找到或retrieve
该事件的信息。
我决定在这里评论之后使用asynctask
并且有人回答我使用但我找不到帖子。
现在我不确定是否使用。
我需要webconnections
,所以我不想让它们成为主要的。所以最好使用asynctask
,但是有必要吗?
答案 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线程上执行长时间运行的操作。这包括文件和网络访问。