缓存Flutter引擎,增加tab FlutterFragment

This commit is contained in:
zu
2021-03-11 20:09:00 +08:00
parent 45fbac48a3
commit 4321f3d271
3 changed files with 57 additions and 24 deletions

View File

@@ -18,6 +18,7 @@ import android.view.animation.LinearInterpolator;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
@@ -178,7 +179,6 @@ import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
import com.yizhuan.xchat_android_library.utils.JavaUtil;
import com.yizhuan.xchat_android_library.utils.codec.DESUtils;
import com.yizhuan.xchat_android_library.utils.pref.CommonPref;
import com.yuxiaor.flutter.g_faraday.FaradayFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -190,6 +190,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.flutter.embedding.android.FlutterFragment;
import io.flutter.embedding.android.RenderMode;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -236,7 +238,10 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
fragmentArray.put(MainTabLayout.MAIN_TAB_POS_MSG, new ContactsListFragment());
fragmentArray.put(MainTabLayout.MAIN_TAB_POS_SQUARE, new SquareFragment());
fragmentArray.put(MainTabLayout.MAIN_TAB_POS_ME, new MeFragment());
fragmentArray.put(MainTabLayout.MAIN_TAB_POS_GAME, FaradayFragment.newInstance("main", null, true,null));
fragmentArray.put(MainTabLayout.MAIN_TAB_POS_GAME, FlutterFragment
.withCachedEngine("xplan_engine")
.renderMode(RenderMode.texture)
.build());
}
public static void start(Context context) {
@@ -507,8 +512,8 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
}
onParseIntent();
handleNimIntent();
if (tempFragment instanceof FaradayFragment && intent != null) {
((FaradayFragment) tempFragment).onNewIntent(intent);
if (tempFragment instanceof FlutterFragment) {
((FlutterFragment) tempFragment).onNewIntent(intent);
}
}
@@ -602,6 +607,9 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
} catch (Exception e) {
e.printStackTrace();
}
if (tempFragment instanceof FlutterFragment) {
((FlutterFragment) tempFragment).onBackPressed();
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
@@ -1117,28 +1125,41 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
StatusBarUtil.transparencyBar(this);
}
@Override
public void onPostResume() {
super.onPostResume();
if (tempFragment instanceof FlutterFragment) {
((FlutterFragment) tempFragment).onPostResume();
}
}
@Override
public void onRequestPermissionsResult(
int requestCode,
@NonNull String[] permissions,
@NonNull int[] grantResults
) {
if (tempFragment instanceof FlutterFragment) {
tempFragment.onRequestPermissionsResult(
requestCode,
permissions,
grantResults
);
}
}
@Override
public void onUserLeaveHint() {
if (tempFragment instanceof FlutterFragment) {
((FlutterFragment) tempFragment).onUserLeaveHint();
}
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
if (tempFragment instanceof FaradayFragment) {
((FaradayFragment) tempFragment).onTrimMemory(level);
if (tempFragment instanceof FlutterFragment) {
((FlutterFragment) tempFragment).onTrimMemory(level);
}
}
@Override
protected void onUserLeaveHint() {
super.onUserLeaveHint();
if (tempFragment instanceof FaradayFragment) {
((FaradayFragment) tempFragment).onUserLeaveHint();
}
}
@Override
protected void onPostResume() {
super.onPostResume();
if (tempFragment instanceof FaradayFragment) {
((FaradayFragment) tempFragment).onPostResume();
}
}
}

View File

@@ -107,6 +107,9 @@ import java.io.IOException;
import java.util.Map;
import java.util.Objects;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterEngineCache;
import io.flutter.embedding.engine.dart.DartExecutor;
import io.reactivex.plugins.RxJavaPlugins;
import io.realm.Realm;
import io.realm.RealmConfiguration;
@@ -247,6 +250,15 @@ public class XChatApplication extends Application {
}
dealHuaWeiCrash();
FlutterEngine flutterEngine = new FlutterEngine(this);
flutterEngine.getDartExecutor().executeDartEntrypoint(
DartExecutor.DartEntrypoint.createDefault()
);
FlutterEngineCache
.getInstance()
.put("xplan_engine", flutterEngine);
LogUtils.d("init time = " +(System.currentTimeMillis() - startTime) +"ms");
}

View File

@@ -33,7 +33,7 @@ public class LabActivity extends BaseActivity {
findViewById(R.id.rb_h5_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:5503/"));
//vue测试地址
findViewById(R.id.rb_vue_test).setOnClickListener(v -> CommonWebViewActivity.start(context, "http://192.168.10.7:8080/"));
findViewById(R.id.rb_flutter_test).setOnClickListener(v -> startActivity(FlutterActivity.createDefaultIntent(context)));
findViewById(R.id.rb_flutter_test).setOnClickListener(v -> startActivity(FlutterActivity.withCachedEngine("xplan_engine").build(context)));
int enviroment = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt(Env.KEY_ENVIRONMENT);
//根据ID找到RadioGroup实例
RadioGroup group = (RadioGroup) this.findViewById(R.id.radioGroup);