如何在多线程中 运行 webviews

How to run webviews in multiple threads

我的作业说要创建一个简单的网络浏览器,将网页保存在卡片中,稍后您可以检索它。

每个 card/webpage 需要 运行 在它自己的线程上。

我已经设置了 webview 和 myWebViewClient 来加载链接,以及第二个 activity 我可以在其中显示和添加新网页。选择 ListView 项目是在 WebView 上调用 MainActivity 中的 loadUrl(url),但这不是理想的结果,我需要在线程中 运行 webview,将其放在堆栈中,然后以某种方式恢复它的任务。

您不能像在Android中那样直接运行后台的webview,所有视图都需要在UI线程上运行。

对于你的任务,你可以做一件事,在后台加载 html 数据,然后在 Asyntask

的 onPost 方法中设置 html 对 webview 的响应

您可以为每个 WebView 创建一个新的 Activity 并将其任务 ID 保存在列表中。如果堆栈中不存在该 ID,则创建一个新的 WebView Activity 并将其放入堆栈,否则将现有的 WebView Activity 从堆栈中推送并恢复此 activity。

使用标志启动 WebView 活动:Intent.FLAG_ACTIVITY_NEW_TASK 和 Intent.FLAG_ACTIVITY_MULTIPLE_TASK

在这些活动中调用 getTaskId() 并使 ID 可用于您的主 activity。当您想恢复 activity 时,请执行以下操作:

ActivityManager am = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
am.moveTaskToFront(taskId, 0);

需要权限android.Manifest.permission.REORDER_TASKS

如果内存管理没有破坏您的 activity,此方法将起作用,在这种情况下,将调用 OnCreate 方法。