【问题标题】:Using excessive amount of network calls in android在android中使用过多的网络调用
【发布时间】:2014-03-14 12:20:45
【问题描述】:

我正在开发一个需要与远程服务器进行大量通信的 Android 应用程序。对于这个任务,我编写了一个处理所有网络通信的类。

我是否需要将每个方法都设为Asynctask?我在其余代码执行中所依赖的方法呢? (因此需要同步完成 - 比如等待注册的答案?)

我之所以这么问,是因为我之前已经有一个小应用程序可以与远程服务器通信,而且我没有使用任何 Asynctasks,但这个应用程序在每个方法被调用时都会崩溃。

编辑 -
同时 - 在我自己上课之前,我发现了一个与谷歌图书馆相关的很棒的教程,它已经处理了图书馆名称是 Volley 我看的教程是 this one

【问题讨论】:

    标签: android android-asynctask androidhttpclient


    【解决方案1】:

    是的,每个网络调用都必须是异步的。您不需要使类中的每个方法都异步,但我会重构代码,使得只有一个代码和平实际上进行调用,并且这种和平必须是异步的。如果您有以下取决于服务器响应的代码,请使用回调。

    在看起来像这样的伪代码中:

    void makeNetworkCall(command, listener){
        async(){
            result = command.execute();
            listener.onCommandSuccess(result);
        }
    }
    

    【讨论】:

    • 你的意思是我需要创建一个泛型类来扩展 asynctask 类吗?没有任何已经处理网络调用的库吗?至于现在我已经建立了一个类来处理每个用户命令(即注册、登录、删除帐户等)每个命令根据它从服务器获取的 JSONObject 值返回一些值,这是否意味着我需要制作每个方法都是子类?我不确定我是否理解您的回答,尽管这似乎是一个很好的遵循方式... =\
    • 您可以创建一个父类,您的所有命令类都从该父类继承。父类将具有上述方法。子类组装正确的命令,从父类调用makeNetworkCall() 方法,然后处理它们与侦听器返回的响应。
    • 谢谢兄弟,非常感谢,一旦我完成它,我会上传一些东西以造福他人[并获得一些建议.. =)]
    【解决方案2】:

    我是否需要将每个方法都设置为 Asynctask?

    是的。Android 要求网络代码异步执行,因此用户界面永远不会被阻塞。

    我在其余代码执行过程中所依赖的方法呢?

    您可以等待Asynchtask 完成执行。参考this question

    【讨论】:

    • 使用get() 不是一个好主意,除非您在某个other 后台线程上调用它。否则,您将阻塞主应用程序线程,这正是我们使用AsyncTask 来避免的。更好的解决方案是遵守事件驱动的编程实践,例如 SimonSays 的回答。
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2016-12-24
    • 2014-08-28
    相关资源
    最近更新 更多