【问题标题】:App loading data slowly after a few interactions几次交互后应用加载数据缓慢
【发布时间】:2015-06-29 10:18:11
【问题描述】:

我有一个 android 应用程序,主要专注于检索显示以及将数据写入在线数据库。我在应用程序中有几个活动,它们使用不同的 Asynctasks 和 http 请求来加载不同的数据。当我启动应用程序时,一切都会迅速加载,当我在不同的活动之间切换时也是如此。但是,如果我在它们之间快速切换,最终屏幕会变黑,大约一分钟后应用程序再次出现,并且数据加载非常非常缓慢。我不确定这是缓存问题还是其他问题。

LOGCAT

06-29 12:23:03.792  14635-14667/com.example.albert.bettertipapp I/System.out﹕ AsyncTask #1 calls detatch()
06-29 12:23:03.792  14635-14667/com.example.albert.bettertipapp W/System.err﹕ org.apache.http.conn.HttpHostConnectException: Connection to http://altesting.byethost33.com refused
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:235)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:167)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:125)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.executeSB(DefaultRequestDirector.java:807)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:675)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:570)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:491)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:469)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at com.example.albert.betterapp.JSONParser.makeHttpRequest(JSONParser.java:70)
06-29 12:23:03.802  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at com.example.albert.betterapp.OldBets$LoadAllGames.doInBackground(OldBets.java:99)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at com.example.albert.betterapp.OldBets$LoadAllGames.doInBackground(OldBets.java:79)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
06-29 12:23:03.812  14635-14667/com.example.albert.bettertipapp W/System.err﹕ Caused by: java.net.ConnectException: failed to connect to /185.27.134.108 (port 80): connect failed: ETIMEDOUT (Connection timed out)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:114)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at java.net.Socket.connect(Socket.java:833)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:188)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ ... 16 more
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at libcore.io.Posix.connect(Native Method)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ at libcore.io.IoBridge.connect(IoBridge.java:112)
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp W/System.err﹕ ... 21 more
06-29 12:23:03.822  14635-14667/com.example.albert.bettertipapp E/Buffer Error﹕ Error converting result java.io.IOException: Attempted read on closed stream.

【问题讨论】:

  • 首先,Asynctasks 在 UI 线程上工作几秒钟后它在后台线程上工作,这就是为什么你的应用程序屏幕变为黑屏的原因。尝试使用新线程
  • 发布了logcat,我知道这是应用程序不作为导致连接超时而不是问题本身的结果

标签: android android-asynctask httprequest


【解决方案1】:

当您退出活动时,即 onStop() 或 onPause() 时,您是否取消了异步任务?

【讨论】:

  • 不,我不是,但是当我关闭活动时,它们已经结束并加载了数据
  • 除非我错过了什么
【解决方案2】:

这是一个假设。如果应用程序每次进入 Activity 时都会启动 HTTP 调用,如果你在它们之间快速切换,你可能会有很多未决的 http 请求。您必须尝试以巧妙的方式处理 http 请求,例如,当您退出活动时使用 Asynctask 上的 cancel() 方法或 HttpRequest 上的中止来停止它们。另外,如果可能的话,还可以缓存http请求的结果。

【讨论】:

  • 我在退出每个活动后使用finish(),我认为这会杀死内部进行的所有进程
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多