我的问题更多的是信息而不是真正的问题。
假设我有一个活动A,它在onCreate期间向服务器发送请求。活动本身实现了收到响应时的回调。所以程序是异步的。
现在,让我们假设用户启动此活动,但在收到回复之前,用户会关闭活动。
所以,当应用收到回复时......会发生什么? 该应用程序仍然有效吗?或者它会抛出一个空指针异常,因为活动(因此回调)不再存在了吗?
对于最后一种情况,这可能是一个很好的解决方案?为请求启动服务?或其他什么?
提前谢谢。
答案 0 :(得分:0)
你做错了。永远不要在任何网络调用的create方法上使用活动。 onCreate方法用于为用户界面设置ui元素,所有网络调用都应该在恢复时发生。
如果您在onresume中启动网络调用并且用户没有等待其结果并退出活动,则因为您调用onResume而不会发生任何事情。您应该通过取消该任务来处理该任务。
答案 1 :(得分:0)
如果您使用的是AsyncTask,则可以使用cancel()
方法。使用此页面上的DownloadFilesTask示例:http://developer.android.com/reference/android/os/AsyncTask.html
在你的活动中,添加一个名为myTask的字段作为DownloadFilesTask的实例并在onCreate上设置它:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.myTask = new DownloadFilesTask().execute(url1, url2, url3);
}
然后在onPause中cancel:
@Override
protected void onPause() {
if (this.myTask != null){
this.myTask.cancel(true);
this.myTask = null;
}
super.onPause();
}
如果您没有使用AsyncTask,我很抱歉在撰写本文时尚未知道,请考虑使用它。