java - InputStream "lags/stuns"应用一段时间

标签 java android networking jsoup inputstream

我的 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/

相关文章:

java - SetText 从类到主 XML 文件

java - Canvas : Double Buffering

c# - 每 60 秒向 RoR 应用程序发送一次 http put 请求的问题

api - IP Camera,如何在网络上检测到它?

linux - Centos - 静态 IP 需要服务网络重启 - 不重启

java - 只允许两个线程操作一个函数

java - 何时使用不可变对象(immutable对象) (Java)

android - 在 android 中读取 EditText 的文本

android - 无法在 Android 中发送带附件的邮件

java - 如何在 Activity 开始时打开 drawerLayout?