与模拟器和Web相比,改进了真实Android设备中更慢的响应时间

时间:2016-02-18 10:15:29

标签: android retrofit okhttp dagger-2 retrofit2

我正在从Android设备进行RESTful API调用以填充列表视图。

  

我使用了swagger codegen来生成我的改造客户端。

     

Dagger 2用于依赖注入

     

设备:华硕Zenfone 5

我试图通过邮递员,网络和模拟器(genymotion)拨打电话,与真实设备相比,它的速度要快得多。

有趣的是,每当我重新启动手机两到三次请求时,响应时间是正常的,之后变慢。

我在okHTTP中阅读了一些关于gzip压缩的博客并尝试实现但没有效果。

如果有人可以帮我解决问题,那将会非常有帮助。

3 个答案:

答案 0 :(得分:3)

响应缓慢与手机无关,可能是由于多种原因造成的。我知道的一些明显原因在下面提到。

1)设备上的互联网连接可能比使用机器网络连接(wifi或LAN连接)的仿真器慢。

2)在您的设备上有多个应用程序在后台使用互联网。检查应用程序运行后台进程并停止它们。

确保使用speedtest.net在您的设备上测试您的互联网速度。希望它可以帮到你。

答案 1 :(得分:3)

在改造中,它会做以下工作:

  1. 建立Retrofit课程。
  2. Impl与DynamicProxy的接口
  3. 根据注释解析并创建Http请求。
  4. 在ThreadPool中使用OkHttp发送和接收HTTP(套接字)IO(在Android中,网络无法在主线程上完成)。
  5. 用一些lib(例如gson)反序列化你的Http主体。
  6. 在回调中更新UI。
  7. 在手机中,我认为1,2,3不是必需的,甚至可以在主线程或缓存上完成。在我的设备(Qcom615,2Gram)中,它将花费不到一毫秒。

    因此您需要使用网络进行调试。

    逐个解决问题:

    1. 您的服务器是使用HTTPS还是使用no-cacahe或no-gzip? Logging您的数据并告诉您服务器的合作伙伴,他们可以给您一些建议。
    2. converters尝试更快的lib。
    3. 改进视图的代码(例如,void redraw / relayout,使主线程中的长时间作业无效)。

答案 2 :(得分:1)

当我在调试器中运行我的应用程序时,它无法使用缓慢。 当我在调试器外运行时,它表现更好。

  

所以结论是,提到的问题与工具和工具无关   我正在使用的图书馆。问题出在USB调试上。

     

因为我是新手到Android开发我不知道   在USB调试模式下APP的性能。