/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.scriptbundle.asynctask; import android.content.Context; import android.content.res.AssetManager; import com.taobao.luaview.global.LuaScriptLoader; import com.taobao.luaview.scriptbundle.LuaScriptManager; import com.taobao.luaview.scriptbundle.ScriptBundle; import com.taobao.luaview.scriptbundle.asynctask.delegate.ScriptBundleUnpackDelegate; import com.taobao.luaview.util.FileUtil; import java.io.File; /** * 将下发的脚本bundle解压到本地文件系统,下发源码的时候才使用 * * @author song * <p/> * 1. 将输入流根据(文件名,data)的格式解出到文件 * 2. 将输入流保存的签名信息(文件名,sign)解出到文件 */ public class ScriptBundleUnpackTask extends BaseAsyncTask<Object, Integer, ScriptBundle> { private Context mContext; private LuaScriptLoader.ScriptLoaderCallback mScriptLoaderCallback; public ScriptBundleUnpackTask(final Context context) { this(context, null); } public ScriptBundleUnpackTask(final Context context, final LuaScriptLoader.ScriptLoaderCallback scriptLoaderCallback) { if (context != null) { this.mContext = context.getApplicationContext(); } this.mScriptLoaderCallback = scriptLoaderCallback; } /** * 接受一个参数,加载的脚本根目录 * * @param params * @return */ @Override protected ScriptBundle doInBackground(Object... params) { if (params != null && params.length > 0) {//一个参数,指定文件路径 final String url = (String) params[0]; final String asset = params.length > 1 ? String.valueOf(params[1]) : null; return ScriptBundleUnpackDelegate.unpack(mContext, url, asset); } return null; } @Override protected void onPostExecute(ScriptBundle bundle) { callLoaderCallback(bundle); } @Override protected void onCancelled() { callLoaderCallback(null); } @Override protected void onCancelled(ScriptBundle bundle) { callLoaderCallback(bundle); } private void callLoaderCallback(ScriptBundle bundle) { if (mScriptLoaderCallback != null) { if (bundle != null && bundle.size() > 0) {//启动loader task new ScriptBundleLoadTask(mContext, mScriptLoaderCallback).executeInPool(bundle); } else { mScriptLoaderCallback.onScriptLoaded(null); } } } }