我的Activity中有ProgressBar,它一直在旋转。我试图连接到可用的网页 - 我使用InputStream
InputStream input = new URL(url).openStream();
获取我想要的网址。它工作正常。除了一种情况:当它开始加载时,我关闭互联网连接,这是加载/处理(这不容易在时间关闭它,但也不难),进度条停止旋转,因为应用程序类似于'冷冻&#39 ;.所以你甚至不能用后退按钮退出它。几秒钟后,就像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();
也是,但同样的问题......
logcat的:
跳过614帧!
LOG2
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.
答案 0 :(得分:-1)
在我看来,在Java中生成线程是一种不好的做法。特别是在Android中。有一些线程池可以更好地处理这个问题。
在您的情况下使用AsyncTask:
AsyncTask.execute(new Runnable() {
@Override
public void run() {
try
{
InputStream input = new URL(url).openStream();
...
} catch (IOException e)
{
e.printStackTrace();
}
}
});