如何在多个线程中运行WebView

时间:2019-05-30 12:56:31

标签: android webview

我的想法是要创建一个简单的Web浏览器,在该浏览器中将网页保存在卡中,以后您就可以检索它。

每个卡/网页都需要在其自己的线程上运行。

我已经设置了webview和myWebViewClient来加载链接,还有第二个活动,我可以在其中显示并添加新的网页。选择ListView项是在loadUrl(url)的{​​{1}}中调用MainActivity,但这不是理想的结果,我需要在线程中运行webview,将其放在堆栈上,然后再恢复这是任务。

2 个答案:

答案 0 :(得分:0)

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

对于您的任务,您可以做一件事,在bacground中加载html数据,然后在Asyntask的onPost方法中将该html响应设置为webview

答案 1 :(得分:0)

您可以为每个WebView创建一个新的Activity并将其任务ID保存在一个List中。如果该ID在堆栈中不存在,则创建一个新的WebView Activity并将其放在堆栈中,否则从堆栈中推送现有的WebView Activity并继续该活动。

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

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

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

需要权限许可android.Manifest.permission.REORDER_TASKS

如果内存管理不会破坏您的活动,此方法将起作用,在这种情况下,将调用OnCreate方法。