有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java片段vs AsyncTask vs IntentService vs Longrunning操作

我有以下设计:

Activity/FragmentA在用户操作后启动异步任务以获取一组数据
AsyncTask运行时,会向用户显示一个进度指示器
当AsyncTask完成任务并获取结果集时,它会将其保存在作为共享数据模型的单例类中

当FragmentA被通知AsyncTask已完成(LocalBroadcastReceiver)时,它会启动ActivityB/FragmentB,从共享单例中获取结果集,并在列表视图中显示它们

这是可行的,但因为我是安卓的新手,所以我正在努力理解和学习最佳实践
例如,我看到从关闭进度条到显示ActivityB/FragmentB的UI之间有一个小的延迟(在此延迟期间,ActivityA/FragmentA的UI仍然可见)
我还认为,如果从FragmentB而不是FragmentA获取项目,会使FragmentB“自治”
总的来说,有人能帮我理解我如何在安卓系统中使用更好的/标准的实践来实现这一点,以及每种方法的优缺点吗


共 (1) 个答案

  1. # 1 楼答案

    片段

    片段是活动的一小部分,它有自己的生命周期,这为开发人员处理UI提供了更大的灵活性。片段与后台进程无关

    现在你的主要问题是关于背景过程

    异步任务

    这只是一个更好的线程版本,带有一些预定义的回调,当你需要执行一些不超过20秒的网络操作时,然后刷新UI,最好使用AsycntTask。不要使用服务(避免复杂性,保持简单)。你也可以使用一些第三方库

    IntentService

    现在IntentService是更好的服务版本,IntentService的主要目的是避免在主线程上执行长时间运行的操作,并为开发人员提供排队系统。如果在运行长时间运行的操作时不需要用户交互,则应使用服务(例如每天结束时将应用程序与服务器同步)

    所以作为结论

    • 用户交互+短时间运行的网络操作=异步任务
    • 无用户交互+长时间运行的网络操作=IntentService+广播接收器通知用户界面所需的