【问题标题】:Refresh current view after asynctask started in another activity在另一个活动中启动异步任务后刷新当前视图
【发布时间】:2014-02-08 17:11:25
【问题描述】:

我有多个活动处理单个全局对象列表。

从活动 A,我可以启动一个异步任务,它发送一个 HTTP Get 请求以检索 XML 消息,然后将 XML 文件解析为一系列对象。

我的目标是能够刷新所有视图,前提是底层数据结构发生变化。

理想情况下,这应该意味着我可以启动 Activity A、调用 asynctask、移动到 Activity B、CD 等,并且当 asynctask 完成时(无论我在哪个 Activity 上)应该更新当前视图。

我已经调查了广播听众,但我不确定我的方向是否正确,是否有可能有人解释这是否可能?

谢谢

【问题讨论】:

  • 您不应该为此使用AsyncTask,因为您还没有完成Activity。您可能想改用Service

标签: android view android-activity android-asynctask refresh


【解决方案1】:

由于AsyncTask 实例依赖于调用者Activity,我认为这不是正确的方法。在您的情况下,由于您需要在 any Activity 中恢复结果,我会使用未绑定的 Service,以便您可以随时随地访问它。

您也可以使用本地BroadcastReceiver,它会向您的所有Activitys 发送信号,并且那些注册发送AsyncTask/Service 的操作的人将执行您可能需要的必要操作.请注意,如果您的Activity 尚未启动,显然Activity 将无法处理您发送的内容,因为该接收者应该未注册。

【讨论】:

    【解决方案2】:

    只需向当前 Activity 的处理程序发布一个 runnable。

    您的活动可以实现一个通用接口,其中存在“updateUI”或其他任何功能,这样您的可运行对象可以是一行,并且与当前活动实例无关。

    您可能知道 asynctask 的后执行部分在启动它的 Activity 的 UI 线程上运行。由于该活动可能已失效,因此只需在异步任务的“doinbackground”部分中发布到处理程序,并将 postexecute 保留为空白。

    interface Updateable{
    
    public Handler getHandler();
    public void updateUI();
    
    }
    
    From Async Thread
    
    final Updateable curr_activity = ...
    Handler handle = curr_activity.getHandler();
    
    
        handle.post(new Runnable() {
    
            @Override
            public void run() {
    
                curr_activity.updateUI();
    
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多