You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by GitBox <gi...@apache.org> on 2019/08/22 15:01:32 UTC

[GitHub] [incubator-weex] lvshuchengyin opened a new issue #2846: weex_sdk:0.26 show white screen

lvshuchengyin opened a new issue #2846: weex_sdk:0.26 show white screen
URL: https://github.com/apache/incubator-weex/issues/2846
 
 
   I try to use weex_sdk:0.26 to run a android demo, but the android app show nothing, just a white screen which mean after SplashActivity, the WXPageActivity show empty content.
   I think maybe  initialization doesn't correct.
   I try to find some demo but doesn't get it, only can find weex_sdk:0.16 version but not 0.26, and the api has been change in 0.26. So I copy the code from weex_playground try to make it work, but fail.
   Could someone help me do some check? 
   Thanks!
   
   WXPageActivity.java
   ``` java
   package com.simpledao.book;
   
   import android.app.Activity;
   import android.app.AlertDialog;
   import android.content.BroadcastReceiver;
   import android.content.Context;
   import android.content.Intent;
   import android.content.IntentFilter;
   import android.graphics.PixelFormat;
   import android.graphics.Rect;
   import android.net.Uri;
   import android.os.Bundle;
   import android.support.annotation.NonNull;
   import android.support.annotation.Nullable;
   import android.support.v7.app.ActionBar;
   import android.text.TextUtils;
   import android.util.Log;
   import android.view.KeyEvent;
   import android.view.View;
   import android.widget.FrameLayout;
   import android.widget.Toast;
   
   import com.simpledao.book.util.AppConfig;
   import com.taobao.weex.IWXRenderListener;
   import com.taobao.weex.RenderContainer;
   import com.taobao.weex.WXSDKInstance;
   import com.taobao.weex.common.WXRenderStrategy;
   import com.taobao.weex.ui.component.NestedContainer;
   import com.taobao.weex.utils.WXFileUtils;
   
   import java.io.File;
   import java.util.HashMap;
   
   public class WXPageActivity extends WXBaseActivity
           implements IWXRenderListener, WXSDKInstance.NestedInstanceInterceptor {
   
       private static final String TAG = "WXPageActivity";
   
       private FrameLayout mContentView;
   
       private BroadcastReceiver mReceiver;
       private Uri mUri;
       private WXSDKInstance mInstance;
       private HashMap<String, Object> mConfigMap = new HashMap<>();
       private WXAnalyzerDelegate mWxAnalyzerDelegate;
   
       @Override
       protected void onCreate(@Nullable Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_wxpage);
   //        WXSDKEngine.setActivityNavBarSetter(new NavigatorAdapter());
           getWindow().setFormat(PixelFormat.TRANSLUCENT);
   
           mUri = Uri.parse(AppConfig.getLaunchUrl());
   
           initUIViews();
           loadPageFromUri();
       }
   
   
       private void loadPageFromUri() {
           loadWXFromLocal(false);
   
           mInstance.onActivityCreate();
           registerBroadcastReceiver();
           mWxAnalyzerDelegate = new WXAnalyzerDelegate(this);
           mWxAnalyzerDelegate.onCreate();
       }
   
   
       private void loadWXFromLocal(boolean reload) {
           if (reload && mInstance != null) {
               mInstance.destroy();
               mInstance = null;
           }
           if (mInstance == null) {
               RenderContainer renderContainer = new RenderContainer(this);
               mInstance = new WXSDKInstance(this);
               mInstance.setRenderContainer(renderContainer);
               mInstance.registerRenderListener(this);
               mInstance.setNestedInstanceInterceptor(this);
               mInstance.setTrackComponent(true);
           }
           mContentView.post(new Runnable() {
               @Override
               public void run() {
                   Activity ctx = WXPageActivity.this;
                   Rect outRect = new Rect();
                   ctx.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
                   mConfigMap.put(WXSDKInstance.BUNDLE_URL, mUri.toString());
                   String path = "file".equals(mUri.getScheme()) ?
                           assembleFilePath(mUri) : mUri.toString();
                   mInstance.render(path, WXFileUtils.loadAsset(path, ctx),
                           mConfigMap, null, WXRenderStrategy.APPEND_ASYNC);
               }
           });
       }
   
       private String assembleFilePath(Uri uri) {
           if (uri != null && uri.getPath() != null) {
               return uri.getPath().replaceFirst("/", "");
           }
           return "";
       }
   
   
       private void initUIViews() {
           mContentView = findViewById(R.id.container);
           ActionBar actionBar = getSupportActionBar();
           if (actionBar != null) {
               actionBar.setDisplayHomeAsUpEnabled(true);
               String title = mUri.toString().substring(mUri.toString()
                       .lastIndexOf(File.separator) + 1);
               actionBar.setTitle(title);
           }
       }
   
       private void registerBroadcastReceiver() {
           mReceiver = new RefreshBroadcastReceiver();
           IntentFilter filter = new IntentFilter();
           filter.addAction(WXSDKInstance.ACTION_DEBUG_INSTANCE_REFRESH);
           filter.addAction(WXSDKInstance.ACTION_INSTANCE_RELOAD);
           registerReceiver(mReceiver, filter);
       }
   
       private void unregisterBroadcastReceiver() {
           if (mReceiver != null) {
               unregisterReceiver(mReceiver);
           }
           mReceiver = null;
       }
   
       @Override
       public void onStart() {
           super.onStart();
           if (mInstance != null) {
               mInstance.onActivityStart();
           }
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onStart();
           }
       }
   
       @Override
       public void onResume() {
           super.onResume();
           if (mInstance != null) {
               mInstance.onActivityResume();
           }
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onResume();
           }
       }
   
       @Override
       protected void onPause() {
           super.onPause();
           if (mInstance != null) {
               mInstance.onActivityPause();
           }
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onPause();
           }
       }
   
       @Override
       protected void onStop() {
           super.onStop();
           if (mInstance != null) {
               mInstance.onActivityStop();
           }
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onStop();
           }
       }
   
       @Override
       public void onBackPressed() {
           if (!mInstance.onBackPressed()) {
               super.onBackPressed();
           }
       }
   
       @Override
       public void onDestroy() {
           if (mInstance != null) {
               mInstance.onActivityDestroy();
           }
           mContentView = null;
           unregisterBroadcastReceiver();
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onDestroy();
           }
           super.onDestroy();
       }
   
       @Override
       public boolean onKeyUp(int keyCode, KeyEvent event) {
           return (mWxAnalyzerDelegate != null && mWxAnalyzerDelegate.onKeyUp(keyCode, event))
                   || super.onKeyUp(keyCode, event);
       }
   
       @Override
       public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                              @NonNull int[] grantResults) {
           super.onRequestPermissionsResult(requestCode, permissions, grantResults);
           if (mInstance != null) {
               mInstance.onRequestPermissionsResult(requestCode, permissions, grantResults);
           }
       }
   
       @Override
       protected void onActivityResult(int requestCode, int resultCode, Intent data) {
           super.onActivityResult(requestCode, resultCode, data);
           if (mInstance != null) {
               mInstance.onActivityResult(requestCode, resultCode, data);
           }
       }
   
       @Override
       public void onViewCreated(WXSDKInstance instance, View view) {
           View wrappedView = null;
           if (mWxAnalyzerDelegate != null) {
               wrappedView = mWxAnalyzerDelegate.onWeexViewCreated(instance, view);
           }
           if (wrappedView != null) {
               view = wrappedView;
           }
           if (view.getParent() == null) {
               mContentView.addView(view);
           }
           mContentView.requestLayout();
       }
   
       @Override
       public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onWeexRenderSuccess(instance);
           }
       }
   
       @Override
       public void onRefreshSuccess(WXSDKInstance instance, int width, int height) {
       }
   
       @Override
       public void onException(WXSDKInstance instance, String errCode, String msg) {
           if (mWxAnalyzerDelegate != null) {
               mWxAnalyzerDelegate.onException(instance, errCode, msg);
           }
           if (!TextUtils.isEmpty(errCode) && errCode.contains("|")) {
               String[] errCodeList = errCode.split("\\|");
               String code = errCodeList[1];
               String codeType = errCode.substring(0, errCode.indexOf("|"));
               if (TextUtils.equals("1", codeType)) {
                   String errMsg = "codeType:" + codeType + "\n" + " errCode:" + code + "\n" +
                           " ErrorInfo:" + msg;
                   degradeAlert(errMsg);
               } else {
                   Toast.makeText(getApplicationContext(), "errCode:" + errCode +
                           " Render ERROR:" + msg, Toast.LENGTH_SHORT).show();
               }
           }
       }
   
       private void degradeAlert(String errMsg) {
           new AlertDialog.Builder(this)
                   .setTitle("Downgrade success")
                   .setMessage(errMsg)
                   .setPositiveButton("OK", null)
                   .show();
       }
   
       @Override
       public void onCreateNestInstance(WXSDKInstance instance, NestedContainer container) {
           Log.d(TAG, "Nested Instance created.");
       }
   
       public class RefreshBroadcastReceiver extends BroadcastReceiver {
           @Override
           public void onReceive(Context context, Intent intent) {
               if (WXSDKInstance.ACTION_INSTANCE_RELOAD.equals(intent.getAction()) ||
                       WXSDKInstance.ACTION_DEBUG_INSTANCE_REFRESH.equals(intent.getAction())) {
                   String myUrl = intent.getStringExtra("url");
                   if (mUri != null) {
                       loadWXFromLocal(true);
                   }
               }
           }
       }
   }
   ```
   
   ``` xml
   <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:fitsSystemWindows="true"
       tools:context="com.simpledao.book.WXPageActivity">
   
       <FrameLayout
           android:id="@+id/container"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:background="#aaaaaa">
   
       </FrameLayout>
   
   </FrameLayout>
   
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services