Skip to content
This repository was archived by the owner on Jun 3, 2021. It is now read-only.

Commit 9be6fa2

Browse files
hpop1994YorkShen
authored andcommitted
[Android] remove unnecessary frameworkInit check in WXBridgeManager for data-render mode (#2337)
1 parent 14a6760 commit 9be6fa2

File tree

2 files changed

+55
-19
lines changed

2 files changed

+55
-19
lines changed

android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import android.widget.ScrollView;
4343
import com.alibaba.fastjson.JSONObject;
4444
import com.taobao.weex.adapter.IDrawableLoader;
45+
import com.taobao.weex.adapter.IWXConfigAdapter;
4546
import com.taobao.weex.adapter.IWXHttpAdapter;
4647
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
4748
import com.taobao.weex.adapter.IWXJscProcessManager;
@@ -168,6 +169,8 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan
168169
*/
169170
private WXRenderStrategy mRenderStrategy = WXRenderStrategy.APPEND_ASYNC;
170171

172+
private boolean mDisableSkipFrameworkInit = false;
173+
171174
/**
172175
* Render start time
173176
*/
@@ -482,7 +485,7 @@ public void init(Context context) {
482485
mContainerInfo.put(WXInstanceApm.KEY_PAGE_PROPERTIES_INSTANCE_TYPE,"page");
483486

484487
WXBridgeManager.getInstance().checkJsEngineMultiThread();
485-
488+
mDisableSkipFrameworkInit = isDisableSkipFrameworkInDataRender();
486489
}
487490

488491
/**
@@ -738,6 +741,14 @@ public void run() {
738741
}
739742
}
740743

744+
public boolean skipFrameworkInit(){
745+
return isDataRender() && !mDisableSkipFrameworkInit;
746+
}
747+
748+
private boolean isDataRender() {
749+
return getRenderStrategy() == WXRenderStrategy.DATA_RENDER_BINARY || getRenderStrategy() == WXRenderStrategy.DATA_RENDER;
750+
}
751+
741752
private void renderByUrlInternal(String pageName,
742753
final String url,
743754
Map<String, Object> options,
@@ -2041,4 +2052,13 @@ public void addInstanceOnFireEventInterceptor(InstanceOnFireEventInterceptor ins
20412052
getInstanceOnFireEventInterceptorList().add(instanceOnFireEventInterceptor);
20422053
}
20432054
}
2055+
2056+
private static boolean isDisableSkipFrameworkInDataRender() {
2057+
IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter();
2058+
if (adapter == null) {
2059+
return false;
2060+
}
2061+
String result = adapter.getConfig("wxeagle", "disable_skip_framework_init", "false");
2062+
return "true".equals(result);
2063+
}
20442064
}

android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1345,7 +1345,7 @@ public void run() {
13451345
private void invokeRefreshInstance(String instanceId, WXRefreshData refreshData) {
13461346
try {
13471347
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
1348-
if (!isJSFrameworkInit()) {
1348+
if (!isSkipFrameworkInit(instanceId) && !isJSFrameworkInit()) {
13491349
if (instance != null) {
13501350
instance.onRenderError(
13511351
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
@@ -1402,6 +1402,18 @@ public void commitJscCrashAlarmMonitor(final String type, final WXErrorCode erro
14021402
}
14031403
}
14041404

1405+
private boolean isSkipFrameworkInit(String instanceId) {
1406+
final WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
1407+
return isSkipFrameworkInit(instance);
1408+
}
1409+
1410+
private boolean isSkipFrameworkInit(WXSDKInstance instance) {
1411+
if (instance == null) {
1412+
return false;
1413+
}
1414+
return instance.skipFrameworkInit();
1415+
}
1416+
14051417
/**
14061418
* Create instance.
14071419
*/
@@ -1426,7 +1438,7 @@ public void createInstance(final String instanceId, final Script template,
14261438
return;
14271439
}
14281440

1429-
if (!isJSFrameworkInit() && reInitCount == 1 && !WXEnvironment.sDebugServerConnectable) {
1441+
if (!isSkipFrameworkInit(instanceId) && !isJSFrameworkInit() && reInitCount == 1 && !WXEnvironment.sDebugServerConnectable) {
14301442
instance.onRenderError(
14311443
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
14321444
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
@@ -1457,12 +1469,14 @@ public void run() {
14571469
private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script template,
14581470
Map<String, Object> options, String data) {
14591471
// add for sandbox, will delete on sandbox ok
1460-
initFramework("");
1472+
if (!isSkipFrameworkInit(instance)){
1473+
initFramework("");
1474+
}
14611475

14621476
if (mMock) {
14631477
mock(instance.getInstanceId());
14641478
} else {
1465-
if (!isJSFrameworkInit()) {
1479+
if (!isSkipFrameworkInit(instance) && !isJSFrameworkInit()) {
14661480
String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
14671481
instance.onRenderError(
14681482
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
@@ -1738,7 +1752,7 @@ private void invokeDestroyInstance(String instanceId) {
17381752
WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
17391753
instanceId);
17401754
WXJSObject[] args = {instanceIdObj};
1741-
if (isJSFrameworkInit()) {
1755+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
17421756
invokeDestoryInstance(instanceId, null, METHOD_DESTROY_INSTANCE, args, true);
17431757
// invokeExecJS(instanceId, null, METHOD_DESTROY_INSTANCE, args);
17441758
}
@@ -1884,7 +1898,7 @@ private String invokeExecJSOnInstance(String instanceId, String js, int type) {
18841898
WXLogUtils.d(mLodBuilder.substring(0));
18851899
mLodBuilder.setLength(0);
18861900
// }
1887-
if (isJSFrameworkInit()) {
1901+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
18881902
return mWXBridge.execJSOnInstance(instanceId, js, type);
18891903
}
18901904
return null;
@@ -1901,7 +1915,7 @@ private void invokeExecJSWithCallback(String instanceId, String namespace, Strin
19011915
WXLogUtils.d(mLodBuilder.substring(0));
19021916
mLodBuilder.setLength(0);
19031917
}
1904-
if (isJSFrameworkInit()) {
1918+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
19051919
mWXBridge.execJSWithCallback(instanceId, namespace, function, args, callback);
19061920
}
19071921
}
@@ -2368,7 +2382,9 @@ public void reportJSException(String instanceId, String function,
23682382
exception += "\n getTemplateInfo==" +instance.getTemplateInfo();//add network header info
23692383
if (METHOD_CREATE_INSTANCE.equals(function) || !instance.isContentMd5Match()) {
23702384
try {
2371-
if (isJSFrameworkInit() && (reInitCount > 1 && reInitCount < 10) && !instance.isNeedReLoad()) {
2385+
//data render mode should report exception instead of reload page,
2386+
// so we use !isSkipFrameworkInit(instanceId) to skip the positive branch of if clause.
2387+
if (!isSkipFrameworkInit(instanceId) && isJSFrameworkInit() && (reInitCount > 1 && reInitCount < 10) && !instance.isNeedReLoad()) {
23722388
new ActionReloadPage(instanceId, true).executeAction();
23732389
instance.setNeedLoad(true);
23742390
return;
@@ -3086,15 +3102,15 @@ public void bindMeasurementToRenderObject(long ptr){
30863102
*/
30873103
@UiThread
30883104
public boolean notifyLayout(String instanceId) {
3089-
if (isJSFrameworkInit()) {
3105+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
30903106
return mWXBridge.notifyLayout(instanceId);
30913107
}
30923108
return false;
30933109
}
30943110

30953111
@UiThread
30963112
public void forceLayout(String instanceId) {
3097-
if (isJSFrameworkInit()) {
3113+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
30983114
mWXBridge.forceLayout(instanceId);
30993115
}
31003116
}
@@ -3105,7 +3121,7 @@ public void forceLayout(String instanceId) {
31053121
* @param instanceId
31063122
*/
31073123
public void onInstanceClose(String instanceId) {
3108-
if (isJSFrameworkInit()) {
3124+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31093125
mWXBridge.onInstanceClose(instanceId);
31103126
}
31113127
}
@@ -3117,7 +3133,7 @@ public void onInstanceClose(String instanceId) {
31173133
* @param defaultHeight
31183134
*/
31193135
public void setDefaultRootSize(final String instanceId, final float defaultWidth, final float defaultHeight, final boolean isWidthWrapContent, final boolean isHeightWrapContent) {
3120-
if (isJSFrameworkInit()) {
3136+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31213137
mWXBridge.setDefaultHeightAndWidthIntoRootDom(instanceId, defaultWidth, defaultHeight, isWidthWrapContent, isHeightWrapContent);
31223138
}
31233139
}
@@ -3129,13 +3145,13 @@ public void setRenderContentWrapContentToCore(boolean wrap, final String instanc
31293145
}
31303146

31313147
public void setStyleWidth(String instanceId, String ref, float value) {
3132-
if (isJSFrameworkInit()) {
3148+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31333149
mWXBridge.setStyleWidth(instanceId, ref, value);
31343150
}
31353151
}
31363152

31373153
public void setStyleHeight(String instanceId, String ref, float value) {
3138-
if (isJSFrameworkInit()) {
3154+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31393155
mWXBridge.setStyleHeight(instanceId, ref, value);
31403156
}
31413157
}
@@ -3155,25 +3171,25 @@ public long[] getRenderFinishTime(String instanceId) {
31553171
}
31563172

31573173
public void setMargin(String instanceId, String ref, CSSShorthand.EDGE edge, float value) {
3158-
if (isJSFrameworkInit()) {
3174+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31593175
mWXBridge.setMargin(instanceId, ref, edge, value);
31603176
}
31613177
}
31623178

31633179
public void setPadding(String instanceId, String ref, CSSShorthand.EDGE edge, float value) {
3164-
if (isJSFrameworkInit()) {
3180+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31653181
mWXBridge.setPadding(instanceId, ref, edge, value);
31663182
}
31673183
}
31683184

31693185
public void setPosition(String instanceId, String ref, CSSShorthand.EDGE edge, float value) {
3170-
if (isJSFrameworkInit()) {
3186+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31713187
mWXBridge.setPosition(instanceId, ref, edge, value);
31723188
}
31733189
}
31743190

31753191
public void markDirty(String instanceId, String ref, boolean dirty) {
3176-
if (isJSFrameworkInit()) {
3192+
if (isSkipFrameworkInit(instanceId) || isJSFrameworkInit()) {
31773193
mWXBridge.markDirty(instanceId, ref, dirty);
31783194
}
31793195
}

0 commit comments

Comments
 (0)