使用 AsyncTask 时应用程序挂起并暂停所有线程

2024-02-01

我正在尝试使用AsyncTask类来获取网站的内容。 logcat 告诉我W/art: Suspending all threads took: 15(or any other number)ms反复。我的应用程序被冻结,直到日志消息打印完成。日志完成后将显示 UI。我遵循了教程并仔细检查了我的代码应该与教程相同。一段时间后,它从网站记录了几行代码,但仅此而已。我也尝试过不同的网站。这是我的异步任务:

public class MainActivity extends AppCompatActivity {

    public class DownloadTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {

            String result = "";
            URL url;
            HttpURLConnection urlConnection = null;

            try {

                url = new URL(urls[0]);

                urlConnection = (HttpURLConnection) url.openConnection();

                InputStream in = urlConnection.getInputStream();

                InputStreamReader reader = new InputStreamReader(in);

                int data = reader.read();

                while (data != -1) {

                    char current = (char) data;

                    result += current;

                    data = reader.read();

                }

                return result;

            } catch (Exception e) {

                e.printStackTrace();

            }

            return null;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DownloadTask task = new DownloadTask();
        String result = null;

        try {

            result = task.execute("http://www.vg.no/").get();

            Log.i("URL content" , result);

        } catch (InterruptedException e) {

            e.printStackTrace();

        } catch (ExecutionException e) {

            e.printStackTrace();

        }

    }


}

下面这行是有问题的:

result = task.execute("http://www.vg.no/").get();

The .get()该语句的一部分意思是“等待任务完成”。这会在任务执行时有效地阻塞 UI 线程。

只需让后台任务完成其工作并通过以下方式返回任何结果onPostExecute()。查看以下 AsyncTask:

public class MainActivity extends AppCompatActivity {

   public class DownloadTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... urls) {
            ...
        }

        @Override
        protected void onPostExecute(String result) {
            Log.i("URL content" , result);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DownloadTask task = new DownloadTask();
        task.execute("http://www.vg.no/");
    }


}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AsyncTask 时应用程序挂起并暂停所有线程 的相关文章

随机推荐

  • 如何使用 TypeScript 为无状态、函数式 React 组件指定(可选)默认 props?

    我正在尝试在 Typescript 中创建一个带有可选 props 和 defaultProps 的无状态 React 组件 对于 React Native 项目 这对于普通 JS 来说是微不足道的 但我对如何在 TypeScript 中实
  • 当模型状态无效时,由于未发送下拉框列表等所有数据,必须重新填充视图模型

    在我的项目中 我创建了一项调查 将该调查链接到一家公司并选择参与的用户 我选择调查模板 添加额外问题并设置有关调查的信息 例如开始和结束日期 总而言之 结果是一个复杂的视图 其中包含来自域的许多部分的数据 我为此视图创建了一个 ViewMo
  • 在 ASP.NET Core 1.0 中使用 SignalR

    我们有一个 ASP NET Core 1 0 RC1 应用程序 我们希望将 SignalR 合并到其中 但是 SignalR 尚未成为 ASP NET Core 1 0 的一部分 有没有办法仍然将 SignalR 合并到我们现有的应用程序中
  • 如何在 Redis 哈希中存储数组?

    我对 Redis 很陌生 想看看是否可行 想象一下我收到这样的数据 account abc name Bob lname Smith account abc name Sam lname Wilson account abc name Jo
  • 这些使用 JavaScript 创建表格的方法有何优缺点?

    我发现在JS中创建表有两种方法 Using insertRow and insertCell var table document getElementById table var row table insertRow 1 var cel
  • 表格行从 itext pdf 中的新页面开始

    我正在使用 PdfPTable 在 pdf 中创建一个表格 表格中有一行 在我的行中 最后一列的数据的高度大于页面的剩余高度 因此 行从下一页开始 而表格标题位于上一页 并且第一页页眉下方有大片空白 任何人都可以建议我如何将行拆分为多个页面
  • 在 JSON.NET 中反序列化具有不同名称的对象列表

    我从一个网站获取数据 该网站返回我非常陌生的 json 格式 我已经寻找解决方案几个小时了 我必须使用这些术语 json 的格式如下 Foo name Foo size human 832 73kB bytes 852718 date hu
  • 如何为气流设置多个调度程序

    我们最近转向了气流 2 0 我想了解设置多个调度程序的过程 我尝试查看各种来源 包括使用天文学家 cli 的程序 但我们没有使用它 对于包括气流文档在内的其他来源 虽然他们提到可以这样做并给出了有关数据库要求的一些详细信息 但他们没有提供有
  • 以最佳方式返回负数的计数

    在按行和列排序的矩阵中搜索 的变体 给定一个按行和列排序的二维矩阵 您必须以最佳方式返回负数的计数 我可以想到这个解决方案 初始化行索引 0 如果行索引 gt 0 行索引 否则应用二分搜索 并用此代码实现 5X5 矩阵 include
  • 打印按值排序的字典

    我基本上是尝试迭代字典并从最大值到最小值打印出键 值 我一直在搜索这个网站 很多人都在使用 lambda 但我不太确定它是如何工作的 所以我现在试图避免它 dictIterator iter sorted bigramDict iterit
  • 如何在悬停时更改 navbarPage 链接的文本颜色(在闪亮的应用程序中)?

    这是我的闪亮应用程序的编辑版本 ui lt tagList fluidPage titlePanel tags head tags style HTML navbar default color red important navbarPa
  • PHP 对象生命周期

    我正在使用 PHP 5 2 如果我在一页上new一个对象 这个对象什么时候会被销毁 当用户转到另一个 php 页面时 对象是否会自动销毁 或者我需要显式调用 destructor 它将在页面加载结束时被破坏 从内存中卸载 或者如果您之前取消
  • SimpleXML 与 DOMDocument 性能对比

    我正在使用 SimpleXML 类构建 RSS 解析器 我想知道使用 DOMDocument 类是否会提高解析器的速度 我正在解析一个至少有 1000 行的 rss 文档 并且我使用了这 1000 行中的几乎所有数据 我正在寻找需要最少时间
  • 如何在 WPF 应用程序中为页面创建模式对话框?

    我有一个 WPF 窗口 其中有一个托管框架的控件 在该框架中我显示不同的页面 有没有办法使对话框仅在页面上模式化 当我显示对话框时 不应单击页面上的任何控件 但应该可以单击不在页面上的同一窗口上的控件 如果我对你的信息的解释是正确的 那么你
  • 正则表达式和 unicode

    我有一个脚本可以解析电视剧集的文件名 例如 show name s01e02 avi 获取剧集名称 来自 www thetvdb com API 并自动将它们重命名为更好的名称 节目名称 01x02 avi 该脚本工作正常 直到您尝试在具有
  • 检查 URL 是否有 http:// 前缀

    在我的应用程序中 当用户添加对象时 还可以添加该对象的链接 然后可以在 webView 中打开该链接 我尝试保存不带 http 前缀的链接 然后在 webView 中打开它 但无法打开它 在webView开始加载之前 有没有办法检查保存的U
  • 在 Dart 中发送 SMTP 电子邮件

    我查看了 API 文档和语言指南 但没有看到任何有关在 Dart 中发送电子邮件的内容 我也检查了这个谷歌群组帖子 https groups google com a dartlang org forum topic misc 5YNvrm
  • 如何通过 JSON 文件为curl 传递有效负载?

    我可以通过以下方式成功创建一个地方curl执行以下命令 curl vX POST https server api v1 places json d auth token B8dsbz4HExMskqUa6Qhn place name Fu
  • 为复杂的跨平台程序创建安装程序

    我正在为一堆相对复杂的桌面应用程序绘制一个应用程序部署过程 我们有本机应用程序和 Java 应用程序 因此部署必须能够检查 JRE 是否存在并在需要时安装它 某些应用程序依赖于特殊硬件 因此部署还必须能够启动必要的驱动程序安装程序 一些应用
  • 使用 AsyncTask 时应用程序挂起并暂停所有线程

    我正在尝试使用AsyncTask类来获取网站的内容 logcat 告诉我W art Suspending all threads took 15 or any other number ms反复 我的应用程序被冻结 直到日志消息打印完成 日