package com.mozz.htmlnative; import android.os.Handler; import android.os.HandlerThread; import android.support.annotation.NonNull; import com.mozz.htmlnative.script.ScriptRunner; import java.lang.ref.WeakReference; /** * @author Yang Tao, 17/2/24. */ final class HNScriptRunnerThread { @NonNull private static HandlerThread mScriptThread = new HandlerThread("HNScriptRunner"); private static Handler mHandler; public static void init() { mScriptThread.start(); mHandler = new Handler(mScriptThread.getLooper()); } public static void quit() { mScriptThread.quit(); } public static void runScript(HNSandBoxContext context, ScriptRunner runner, String script) { mHandler.post(new ScriptRunTask(context, runner, script)); } private static class ScriptRunTask implements Runnable { WeakReference<HNSandBoxContext> mContextRef; WeakReference<ScriptRunner> mRunnerRef; String script; ScriptRunTask(HNSandBoxContext context, ScriptRunner runner, String script) { mContextRef = new WeakReference<>(context); mRunnerRef = new WeakReference<>(runner); this.script = script; } @Override public void run() { ScriptRunner runner = mRunnerRef.get(); HNSandBoxContext context = mContextRef.get(); if (runner != null && context != null && script != null) { runner.run(this.script); } } } }