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/08/01 07:56:02 UTC
[2/3] incubator-weex git commit: * [android] use ThreadExecutor to
manage work thread
* [android] use ThreadExecutor to manage work thread
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/75414781
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/75414781
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/75414781
Branch: refs/heads/0.16-dev
Commit: 754147818a02704c8fb8fac9a4991ea4d1c692a4
Parents: c4cec2b
Author: miomin <69...@qq.com>
Authored: Tue Aug 1 15:31:47 2017 +0800
Committer: miomin <69...@qq.com>
Committed: Tue Aug 1 15:31:47 2017 +0800
----------------------------------------------------------------------
.../java/com/alibaba/weex/IndexActivity.java | 14 ++++++
.../main/java/com/taobao/weex/WXSDKManager.java | 10 ++++
.../taobao/weex/common/WXWorkThreadManager.java | 48 ++++++++++++++++++++
.../com/taobao/weex/ui/component/WXImage.java | 11 ++++-
.../taobao/weex/utils/WXViewToImageUtil.java | 23 +++-------
5 files changed, 89 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75414781/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
index 8469b26..866733a 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
@@ -51,6 +51,7 @@ public class IndexActivity extends AbstractWeexActivity {
private static final String TAG = "IndexActivity";
private static final int CAMERA_PERMISSION_REQUEST_CODE = 0x1;
+ private static final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 0x2;
private static final String DEFAULT_IP = "your_current_IP";
private static String sCurrentIp = DEFAULT_IP; // your_current_IP
@@ -102,6 +103,18 @@ public class IndexActivity extends AbstractWeexActivity {
};
LocalBroadcastManager.getInstance(this).registerReceiver(mReloadReceiver, new IntentFilter(WXSDKEngine.JS_FRAMEWORK_RELOAD));
+
+ requestWeexPermission();
+ }
+
+ private void requestWeexPermission() {
+ if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
+ Toast.makeText(this, "please give me the permission", Toast.LENGTH_SHORT).show();
+ } else {
+ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);
+ }
+ }
}
@Override
@@ -147,6 +160,7 @@ public class IndexActivity extends AbstractWeexActivity {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_PERMISSION_REQUEST_CODE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startActivity(new Intent(this, CaptureActivity.class));
+ } else if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "request camara permission fail!", Toast.LENGTH_SHORT).show();
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75414781/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 0b43fa6..4e144e0 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -45,6 +45,7 @@ import com.taobao.weex.bridge.WXValidateProcessor;
import com.taobao.weex.common.WXRefreshData;
import com.taobao.weex.common.WXRuntimeException;
import com.taobao.weex.common.WXThread;
+import com.taobao.weex.common.WXWorkThreadManager;
import com.taobao.weex.dom.WXDomManager;
import com.taobao.weex.ui.WXRenderManager;
import com.taobao.weex.utils.WXLogUtils;
@@ -64,6 +65,7 @@ public class WXSDKManager {
private static volatile WXSDKManager sManager;
private static AtomicInteger sInstanceId = new AtomicInteger(0);
private final WXDomManager mWXDomManager;
+ private final WXWorkThreadManager mWXWorkThreadManager;
private WXBridgeManager mBridgeManager;
/** package **/ WXRenderManager mWXRenderManager;
@@ -97,6 +99,7 @@ public class WXSDKManager {
mWXRenderManager = renderManager;
mWXDomManager = new WXDomManager(mWXRenderManager);
mBridgeManager = WXBridgeManager.getInstance();
+ mWXWorkThreadManager = new WXWorkThreadManager();
}
/**
@@ -195,6 +198,10 @@ public class WXSDKManager {
return mWXRenderManager;
}
+ public WXWorkThreadManager getWXWorkThreadManager() {
+ return mWXWorkThreadManager;
+ }
+
public @Nullable WXSDKInstance getSDKInstance(String instanceId) {
return instanceId == null? null : mWXRenderManager.getWXSDKInstance(instanceId);
}
@@ -207,6 +214,9 @@ public class WXSDKManager {
if (mWXDomManager != null) {
mWXDomManager.destroy();
}
+ if (mWXWorkThreadManager != null) {
+ mWXWorkThreadManager.destroy();
+ }
}
@Deprecated
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75414781/android/sdk/src/main/java/com/taobao/weex/common/WXWorkThreadManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXWorkThreadManager.java b/android/sdk/src/main/java/com/taobao/weex/common/WXWorkThreadManager.java
new file mode 100644
index 0000000..3510d54
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXWorkThreadManager.java
@@ -0,0 +1,48 @@
+/*
+ * 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.common;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Class for managing work thread
+ */
+public final class WXWorkThreadManager {
+
+ private ExecutorService singleThreadExecutor;
+
+ public WXWorkThreadManager() {
+ singleThreadExecutor = Executors.newSingleThreadExecutor();
+ }
+
+ public void post(Runnable task) {
+ if (singleThreadExecutor != null)
+ singleThreadExecutor.execute(task);
+ }
+
+ /**
+ * Destroy current instance
+ */
+ public void destroy() {
+ if (singleThreadExecutor != null)
+ singleThreadExecutor.shutdown();
+ singleThreadExecutor = null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75414781/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
index 1820989..db58d99 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
@@ -70,7 +70,6 @@ import java.util.Map;
public class WXImage extends WXComponent<ImageView> {
public static final String SUCCEED = "success";
- public static final String PATH = "path";
public static final String ERRORDESC = "errorDesc";
private String mSrc;
@@ -369,6 +368,16 @@ public class WXImage extends WXComponent<ImageView> {
return;
}
+ if (mSrc == null || mSrc.equals("")) {
+ if (saveStatuCallback != null) {
+ Map<String, Object> result = new HashMap<>();
+ result.put(SUCCEED, false);
+ result.put(ERRORDESC,"Image does not have the correct src");
+ saveStatuCallback.invoke(result);
+ }
+ return;
+ }
+
WXViewToImageUtil.generateImage(mHost, 0, 0xfff8f8f8, new WXViewToImageUtil.OnImageSavedCallback() {
@Override
public void onSaveSucceed(String path) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/75414781/android/sdk/src/main/java/com/taobao/weex/utils/WXViewToImageUtil.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewToImageUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewToImageUtil.java
index df34a26..b486fb5 100755
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewToImageUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewToImageUtil.java
@@ -29,6 +29,9 @@ import android.os.Looper;
import android.provider.MediaStore;
import android.support.annotation.ColorInt;
import android.view.View;
+
+import com.taobao.weex.WXSDKManager;
+
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -42,11 +45,6 @@ public class WXViewToImageUtil {
public static int mBackgroundColor = Color.TRANSPARENT;
/**
- * Use this variable to ensure that only one save image task occurs at the same time
- */
- private static boolean isSaving = false;
-
- /**
* Generate image and return path via callback
*/
public static void generateImage(final View imageView, final int width,
@@ -54,18 +52,12 @@ public class WXViewToImageUtil {
mBackgroundColor = backgroundColor;
- // The new task can not be triggered until the last task completes
- if (isSaving) {
- return;
- }
- isSaving = true;
-
// Only one save image task occurs at the same time
- new Thread(new Runnable() {
+ WXSDKManager.getInstance().getWXWorkThreadManager().post(new Thread(new Runnable() {
@Override
public void run() {
// Generate bitmap from ImageView
- Bitmap bitmap = getImageViewToBitmap(imageView, width);
+ Bitmap bitmap = getBitmapFromImageView(imageView, width);
if (bitmap == null) {
if (mOnImageSavedCallback != null) {
@@ -86,9 +78,8 @@ public class WXViewToImageUtil {
}
}
});
- isSaving = false;
}
- }).start();
+ }));
}
/**
@@ -146,7 +137,7 @@ public class WXViewToImageUtil {
/**
* Get bitmap from imageview
*/
- public static Bitmap getImageViewToBitmap(final View view, int width) {
+ public static Bitmap getBitmapFromImageView(final View view, int width) {
if (view.getWidth() <= 0 || view.getHeight() <= 0) {
view.measure(View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));