You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by so...@apache.org on 2017/06/28 02:26:36 UTC
[3/5] incubator-weex git commit: * [android] add observer for
component
* [android] add observer for component
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/a891e2d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/a891e2d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/a891e2d4
Branch: refs/heads/0.14-dev
Commit: a891e2d4696444e6cca23a051f611743a28b5e0b
Parents: d26c46f
Author: sospartan <so...@apache.org>
Authored: Wed Jun 14 17:04:28 2017 +0800
Committer: sospartan <so...@apache.org>
Committed: Wed Jun 28 10:18:15 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/ComponentObserver.java | 50 ++++++++++++++++++++
.../java/com/taobao/weex/WXSDKInstance.java | 17 +++++++
.../taobao/weex/ui/component/WXComponent.java | 14 ++++++
3 files changed, 81 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a891e2d4/android/sdk/src/main/java/com/taobao/weex/ComponentObserver.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ComponentObserver.java b/android/sdk/src/main/java/com/taobao/weex/ComponentObserver.java
new file mode 100644
index 0000000..a2bcd09
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ComponentObserver.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex;
+
+import android.view.View;
+
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 14/06/2017.
+ */
+
+public interface ComponentObserver {
+
+ /**
+ * Called after component is create.
+ * Notice: View is not created at this moment.
+ * @param component
+ */
+ void onCreate(WXComponent component);
+
+ /**
+ * Called before component destroy.
+ * @param component
+ */
+ void onPreDestory(WXComponent component);
+
+ /**
+ * Called when component's view is created
+ * @param component
+ * @param view
+ */
+ void onViewCreated(WXComponent component,View view);
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a891e2d4/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index 2db6fb3..47b7f30 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -141,6 +141,8 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
private LayoutFinishListener mLayoutFinishListener;
+ private ComponentObserver mComponentObserver;
+
/**
* If anchor is created manually(etc. define a layout xml resource ),
@@ -275,6 +277,21 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
mUserTrackAdapter=WXSDKManager.getInstance().getIWXUserTrackAdapter();
}
+ /**
+ * Set a Observer for component.
+ * This observer will be called in each component, should not doing
+ * anything will impact render performance.
+ *
+ * @param observer
+ */
+ public void setComponentObserver(ComponentObserver observer){
+ mComponentObserver = observer;
+ }
+
+ public ComponentObserver getComponentObserver(){
+ return mComponentObserver;
+ }
+
public NativeInvokeHelper getNativeInvokeHelper() {
return mNativeInvokeHelper;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/a891e2d4/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
index c0d7c7a..54f822b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -41,6 +41,7 @@ import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.ComponentObserver;
import com.taobao.weex.IWXActivityStateListener;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
@@ -225,6 +226,10 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
mGestureType = new HashSet<>();
++mComponentNum;
onCreate();
+ ComponentObserver observer;
+ if ((observer = getInstance().getComponentObserver()) != null) {
+ observer.onCreate(this);
+ }
}
protected void onCreate(){
@@ -902,6 +907,10 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
}
if(mHost != null){
mHost.setId(WXViewUtils.generateViewId());
+ ComponentObserver observer;
+ if ((observer = getInstance().getComponentObserver()) != null) {
+ observer.onViewCreated(this, mHost);
+ }
}
onHostViewInitialized(mHost);
}else{
@@ -1273,6 +1282,11 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
}
public void destroy() {
+ ComponentObserver observer;
+ if ((observer = getInstance().getComponentObserver()) != null) {
+ observer.onPreDestory(this);
+ }
+
if (WXEnvironment.isApkDebugable() && !WXUtils.isUiThread()) {
throw new WXRuntimeException("[WXComponent] destroy can only be called in main thread");
}