Android - 设计模式 - 等待网络

时间:2012-08-26 12:43:35

标签: android multithreading android-ui

我有一些Activity实现了一个接口(称为NetworkListener)。从远程服务器请求信息时,它们会生成一个类的实例(称为NetworkRequest)。 NetworkRequest是一个线程类,它将请求发送到服务器,等待响应并将其发送回请求的NetworkListener对象。将数据返回到NetworkListener实例可能需要10秒钟。在此期间,很可能该Activity或Fragment不再存在,并且很多操作都基于服务器调用 不再有效,会抛出NPE,例如:

((TextView) findViewById(R.id.server_status)).setText("Server response: " + response.getMsg());

确保请求类仍处于活动状态且能够更新UI的最佳方法是什么?

目前在接收来自服务器的回调的每个方法的顶部,我有:

if (getWindow() == null) {  // or getView()/getActivity() if Fragment
            finish();
            return;
        }

这似乎效率低下且多余。对我想要完成的事情有没有更好的方法?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将activity / fragment的逻辑检查状态移动到NetworkRequest。将isActive()方法添加到NetworkListener接口。 仅当后者处于活动状态时,NetwrokRequest才会向NetworkListener发送响应。

您可以在onCreate() - >中设置活动/片段活动性active和onDestroy() - >不活动的。

请注意旋转屏幕时的活动状态更改。然后,你得到一个新的活动,它没有得到服务器的响应,这可能不是你想要的。

答案 1 :(得分:0)

您可以使用AsyncTask来执行网络请求。当不再需要请求时,可以取消AsyncTask。