我的 Activity 中有 ProgressBar,它一直在旋转。我正在尝试连接到可用的网页 - 我使用输入流
InputStream input = new URL(url).openStream();
获取我想要的 URL。运行良好。除了一种情况:当它开始加载时,我在加载/处理时关闭互联网连接(及时关闭它并不容易,但也不难),进度条停止旋转,因为应用程序就像‘卡住’。所以你甚至不能用后退按钮退出它。几秒钟后,例如 3-4,ProgressBar 再次旋转,应用程序解冻并完全运行。 LogCat 仅打印应用程序跳过了许多帧。
代码:
new Thread(new Runnable()
{
public void run()
{
try
{
InputStream input = new URL(url).openStream();
...
} catch (IOException e)
{
e.printStackTrace();
}
}
}).start();
编辑:我正在使用 Jsoup 来读取收到的网页。所以我尝试了
Jsoup.connect(url).get();
也是,但问题与上面相同...
日志猫:
Skipped 614 frames!
日志2
10-14 17:25:16.365 26460-26460 D/libEGL: loaded /system/lib/egl/libEGL_mali.so
10-14 17:25:16.375 26460-26460 D/libEGL: loaded /system/lib/egl/libGLESv1_CM_mali.so
10-14 17:25:16.375 26460-26460 D/libEGL: loaded /system/lib/egl/libGLESv2_mali.so
10-14 17:25:16.395 26460-26460 D/OpenGLRenderer: Enabling debug mode 0
10-14 17:25:27.406 26460-26460 I/Choreographer: Skipped 603 frames! The application may be doing too much work on its main thread.
最佳答案
在我看来,在 Java 中生成线程是一种不好的做法。尤其是在安卓系统中。有线程池可以更好地处理这个问题。
在您的情况下使用 AsyncTask:
AsyncTask.execute(new Runnable() {
@Override
public void run() {
try
{
InputStream input = new URL(url).openStream();
...
} catch (IOException e)
{
e.printStackTrace();
}
}
});
关于java - InputStream "lags/stuns"应用一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39964723/