我的情况是,我有多个活动处理单个全局对象列表。
从活动A开始,我可以启动一个asynctask,它发送一个HTTP Get请求来检索XML消息,然后将XML文件解析为一系列对象。
我的目标是只有在底层数据结构发生变化时才能刷新所有视图。
理想情况下,这应该意味着我可以启动活动A,调用asynctask,移动到活动B,CD等,当asynctask完成时(无论我在哪个活动上),都应该更新当前视图。
我已经调查了广播听众,但我不确定我是否朝着正确的方向发展,有人可以解释这是否可行?
由于
答案 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();
}
});