Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓-设计模式-等待网络_Android_Multithreading_Android Ui - Fatal编程技术网

Android 安卓-设计模式-等待网络

Android 安卓-设计模式-等待网络,android,multithreading,android-ui,Android,Multithreading,Android Ui,我有一些活动实现了一个接口(称为NetworkListener)。当从远程服务器请求信息时,它们生成一个类的实例(称为NetworkRequest)。NetworkRequest是一个线程类,它向服务器发送请求,等待响应并将其发送回请求NetworkListener对象。将数据返回NetworkListener实例可能需要10秒钟。在这段时间内,很可能那个活动或片段已经不存在了,而且很多操作都是基于服务器调用的 不再有效并将抛出NPE,例如: ((TextView) findViewById(R

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

((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中设置活动/片段活动性

只需小心活动状态的变化,如旋转屏幕时。然后,您会得到一个新的活动,它不会得到服务器的响应,这可能不是您想要的