Start the webview_zygote at boot, but in the background.

This reverts "Delay starting the webview_zygote until first use." but
instead wraps the start in a background task, to avoid blocking the
system server startup waiting for the zygote to be ready.

Bug: 73743583
Bug: 63749735
Bug: 74079433
Test: Verify webview_zygote already running after boot
Change-Id: Iacf968cc2d2857a92c6bacf4012dc88f098c6013
diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java
index 07593a5..49e11b8 100644
--- a/core/java/android/webkit/WebViewZygote.java
+++ b/core/java/android/webkit/WebViewZygote.java
@@ -19,6 +19,7 @@
 import android.app.LoadedApk;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
+import android.os.AsyncTask;
 import android.os.Build;
 import android.os.ChildZygoteProcess;
 import android.os.Process;
@@ -93,11 +94,17 @@
         synchronized (sLock) {
             sMultiprocessEnabled = enabled;
 
-            // When multi-process is disabled, kill the zygote. When it is enabled,
-            // the zygote is not explicitly started here to avoid waiting on the
-            // zygote launch at boot. Instead, the zygote will be started when it is
-            // first needed in getProcess().
-            if (!enabled) {
+            // When toggling between multi-process being on/off, start or stop the
+            // zygote. If it is enabled and the zygote is not yet started, launch it.
+            // Otherwise, kill it. The name may be null if the package information has
+            // not yet been resolved.
+            if (enabled) {
+                // Run on a background thread as this waits for the zygote to start and we don't
+                // want to block the caller on this. It's okay if this is delayed as anyone trying
+                // to use the zygote will call it first anyway.
+                AsyncTask.THREAD_POOL_EXECUTOR.execute(WebViewZygote::getProcess);
+            } else {
+                // No need to run this in the background, it's very brief.
                 stopZygoteLocked();
             }
         }