1

我正在寻找一些关于如何最好地实现此处找到的 Android-Async-Http 库的设计方法的建议:链接

我过去使用过这个库,它对我来说效果很好,但是我遇到了一些小问题,我相信可以通过改变我实现它的方式来解决。

我遇到的问题是,如果我提出了请求,并且当我的活动不再处于活动状态(由于用户关闭它)并且正在显示的错误消息/内容引发错误时运行异步回调,因为它实际上不能在那一刻访问活动,因为它不再可用。然而,这个问题并不是这个问题的主要关注点,而是因为我试图在异步回调中访问 UI。

在为我的问题寻找一些解决方案时,我收到了以下建议:

@Zapnologica 在实现回调时,您基本上不想依赖 UI/Context 的存在。更好的设计是使用 Service,它对返回的数据执行任何需要的操作,然后通知(广播 Intent 或使用 ServiceConnection)侦听器(例如,您的活动/片段实现),如果上下文是,广播将不起作用已经不存在或片段处于不可见/停用状态。

现在这让我想到我错误地实现了库。目前我有一个静态实例,HttpClient然后我从我的活动/片段中调用它。然后我在库的异步回调中执行相应的代码(因为回调在调用活动线程上运行)。下面是一个例子:

Network.Post(getApplicationContext(), URL, RequestParams, new  public AsyncHttpResponseHandler  {     

        @Override
        public void onStart() {             
        }

        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] response) {
          UpdateListviewAdapter(ParseNetworkResponse(response));
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
            Toast.makeToast("Error", Toast.LONG).show();
            }
        }
    };
}

现在这个实现已经足够了,它完成了工作。但是,我正在开始一个新的应用程序,我想从头开始并尽可能最好地实现该库,这样我就不会进一步遇到问题。我喜欢上面引用的文字中smarek给我的观点。

  • 使用服务
  • 广播 Intent 或使用 ServiceConnection 将响应中继回 Activty

我想了解更多关于这两个建议的信息。

我喜欢使用服务发出网络请求的想法,这样它将实际网络请求的实现与所有活动和片段分开,并且我能够进行可能的处理,例如解析 JSON ,错误处理等一个不同的线程。因此从 UI 线程中移除负载是好的。但是,我确实对我所读到的有关服务的内容有些担忧,那就是:

  1. 如果需要清理资源,Android 可以随时关闭/终止服务。如果发生这种情况,我的应用程序会失去连接吗?或者android不会关闭当前正在运行的应用程序正在使用的服务?

  2. 我是否将库的静态实例放入HttpCLient服务中?我该怎么做呢?

该活动是否会联系我的“NetworkignService”并告诉它我想向 X url 发出请求并将所需的参数传递给它。然后该服务将发出网络请求,等待响应,然后处理该响应。无论是错误还是成功的响应。然后我会在我的 Activity 中定义一个公共方法,服务将调用它,并完全按照我的需要给它响应数据吗?然后我需要在 UI 上做的就是显示数据?

我希望实现以下目标:

  • 集中代码/访问库的实现。
  • 网络请求的集中错误处理
  • 尽可能多地从 UI 线程中移除负载
  • 使其具有动态性和可扩展性,以便我可以在多个项目中重用网络服务器/实现。
  • 能够从我的应用程序中的活动、片段或其他服务/类发出 Http 请求。

请问我可以就提议的解决方案获得您的意见和建议,并可能提到更好的解决方案吗?基本上我正在寻找的是一个好的设计模式/原则,我可以从我的活动和片段中发出网络请求。

4

0 回答 0