在另一个活动中启动asynctask后刷新当前视图

时间:2014-02-08 17:11:25

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

我的情况是,我有多个活动处理单个全局对象列表。

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

我的目标是只有在底层数据结构发生变化时才能刷新所有视图。

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

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

由于

2 个答案:

答案 0 :(得分:0)

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

您也可以使用本地BroadcastReceiver向您的所有Activity发送信号,以及注册发送您AsyncTask / Service的操作的人,会执行你可能需要的必要行动。请注意,Activity尚未启动,显然Activity将无法处理您发送的内容,因为该接收方应取消注册。

答案 1 :(得分:0)

只需将runnable发布到当前Activity的处理程序即可。

您的活动可以实现一个公共接口,其中存在函数“updateUI”或其他任何存在,并且您的runnable可以是一行,并且对当前活动实例不可知。

您可能知道asynctask的postexecute部分在启动它的活动的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();

        }
    });