Android 安卓-设计模式-等待网络
我有一些活动实现了一个接口(称为NetworkListener)。当从远程服务器请求信息时,它们生成一个类的实例(称为NetworkRequest)。NetworkRequest是一个线程类,它向服务器发送请求,等待响应并将其发送回请求NetworkListener对象。将数据返回NetworkListener实例可能需要10秒钟。在这段时间内,很可能那个活动或片段已经不存在了,而且很多操作都是基于服务器调用的 不再有效并将抛出NPE,例如:Android 安卓-设计模式-等待网络,android,multithreading,android-ui,Android,Multithreading,Android Ui,我有一些活动实现了一个接口(称为NetworkListener)。当从远程服务器请求信息时,它们生成一个类的实例(称为NetworkRequest)。NetworkRequest是一个线程类,它向服务器发送请求,等待响应并将其发送回请求NetworkListener对象。将数据返回NetworkListener实例可能需要10秒钟。在这段时间内,很可能那个活动或片段已经不存在了,而且很多操作都是基于服务器调用的 不再有效并将抛出NPE,例如: ((TextView) findViewById(R
((TextView) findViewById(R.id.server_status)).setText("Server response: " + response.getMsg());
确保请求类仍然处于活动状态并能够更新UI的最佳方法是什么
当前,在接收来自服务器的回调的每个方法的顶部,我有:
if (getWindow() == null) { // or getView()/getActivity() if Fragment
finish();
return;
}
这似乎是低效和多余的。有没有更好的方法来实现我的目标
谢谢 您可以使用AsyncTask执行网络请求。当不再需要请求时,可以取消AsyncTask。您可以将活动/片段的逻辑检查状态移动到NetworkRequest。将isActive()方法添加到NetworkListener接口。 仅当NetworkListener处于活动状态时,NetworkRequest才会向NetworkListener发送响应 您可以在onCreate()->active和onDestroy()->inactive中设置活动/片段活动性 只需小心活动状态的变化,如旋转屏幕时。然后,您会得到一个新的活动,它不会得到服务器的响应,这可能不是您想要的