Skip to content

Commit

Permalink
keep native thread is main
Browse files Browse the repository at this point in the history
  • Loading branch information
smallBuild committed Mar 1, 2020
1 parent c8da5ef commit 9b32628
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 19 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ v1.0.1
2.修复1.0.0版本中WebViewJavascriptBridge.js以js脚本引入路径错误不生效问题,
修改为直接使用webview.loadurl(javascript:str)方式插入H5中;

v1.0.2

1.h5调用原生和回调原生后切换线程到main线程,便于后续业务的处理





Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#### JSBridge-Android
[ ![Download](https://api.bintray.com/packages/smallbuer/tools/jsbridge/images/download.svg?version=1.0.1) ](https://bintray.com/smallbuer/tools/jsbridge/1.0.1/link) [![Release Version](https://img.shields.io/badge/release-1.0.1-red.svg)](https://github.com/smallbuer/JSBridge-Android/releases) [![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](https://github.com/smallbuer/JSBridge-Android)
[ ![Download](https://api.bintray.com/packages/smallbuer/tools/jsbridge/images/download.svg?version=1.0.2) ](https://bintray.com/smallbuer/tools/jsbridge/1.0.2/link) [![Release Version](https://img.shields.io/badge/release-1.0.2-red.svg)](https://github.com/smallbuer/JSBridge-Android/releases) [![Platform](https://img.shields.io/badge/Platform-Android-brightgreen.svg)](https://github.com/smallbuer/JSBridge-Android)
### 简介

本项目来源于 lzyzsd的[JsBridge](https://github.com/lzyzsd/JsBridge),由于作者长时间未修复部分代码丢失问题,所以目前存在的调用丢失问题以及效率问题无法在原项目得到回应,所以重构了目前js文件以及java类;
Expand Down
5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,10 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation project(':jsbridge')
//implementation project(':jsbridge')

implementation 'com.smallbuer:jsbridge:1.0.2'

//implementation 'com.smallbuer:jsbridge:1.0.1'
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.1'
Expand Down
6 changes: 4 additions & 2 deletions app/src/main/java/com/smallbuer/jsbridge/demo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ class MainActivity : AppCompatActivity() {
btnNativeToJsX5.setOnClickListener{

x5Webview.callHandler("functionInJs", "我是原生传递的参数") { data ->
Log.i(TAG, "reponse data from js $data")
Log.i(TAG, "reponse data from js $data"+",Thread is "+Thread.currentThread().name)
}
}

Expand All @@ -75,7 +75,9 @@ class MainActivity : AppCompatActivity() {
btnNativeToJsBridgeWebView.setOnClickListener{

bridgeWebview.callHandler("functionInJs", "我是原生传递的参数") { data ->
Log.i(TAG, "reponse data from js $data")


Log.i(TAG, "reponse data from js $data"+",Thread is "+Thread.currentThread().name)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class RequestBridgeHandler extends BridgeHandler {
@Override
public void handler(Context context,String data, CallBackFunction function) {

BridgeLog.d(TAG,"data->"+data);
BridgeLog.d(TAG,"data->"+data+",Thread is "+Thread.currentThread().getName());

//a network request .....
//callback
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,18 @@
import android.widget.Toast;

import com.smallbuer.jsbridge.core.BridgeHandler;
import com.smallbuer.jsbridge.core.BridgeLog;
import com.smallbuer.jsbridge.core.CallBackFunction;

public class ToastBridgeHandler extends BridgeHandler {

private String TAG = "ToastBridgeHandler";

@Override
public void handler(Context context,String data, CallBackFunction function) {

BridgeLog.d(TAG,"data->"+data+",Thread is "+Thread.currentThread().getName());

Toast.makeText(context,"data:"+data,Toast.LENGTH_SHORT).show();

function.onCallBack("{\"status\":\"0\",\"msg\":\"toast success\"}");
Expand Down
2 changes: 1 addition & 1 deletion jsbridge/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ publish {
repoName = 'tools'
groupId = 'com.smallbuer'
artifactId = 'jsbridge'
publishVersion = '1.0.1'
publishVersion = '1.0.2'
desc = 'jsbridge for android'
website = 'https://github.com/smallbuer/JSBridge-Android'
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.smallbuer.jsbridge.core;

import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.webkit.JavascriptInterface;
Expand All @@ -9,7 +11,7 @@
public abstract class BaseJavascriptInterface {

private String TAG = "BaseJavascriptInterface";

Handler mMainHandler = new Handler(Looper.getMainLooper());
private Map<String, OnBridgeCallback> mCallbacks;

public BaseJavascriptInterface(Map<String, OnBridgeCallback> callbacks) {
Expand All @@ -22,13 +24,20 @@ public String send(String data, String callbackId) {
}

@JavascriptInterface
public void response(String data, String responseId) {
Log.d(TAG, "response->"+data + ", responseId: " + responseId + " " + Thread.currentThread().getName());
public void response(final String data, final String responseId) {

BridgeLog.d(TAG, "response->"+data + ", responseId: " + responseId + " " + Thread.currentThread().getName());

if (!TextUtils.isEmpty(responseId)) {
OnBridgeCallback function = mCallbacks.remove(responseId);
if (function != null) {
function.onCallBack(data);
}
mMainHandler.post(new Runnable() {
@Override
public void run() {
OnBridgeCallback function = mCallbacks.remove(responseId);
if (function != null) {
function.onCallBack(data);
}
}
});
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,22 @@ public String send(String data) {
}

@JavascriptInterface
public void handler(String handlerName,String data, String callbackId) {
public void handler(final String handlerName, final String data, final String callbackId) {
if(TextUtils.isEmpty(handlerName)){
return;
}
if(mBridge.getMessageHandlers().containsKey(handlerName)){
BridgeHandler bridgeHandler = mBridge.getMessageHandlers().get(handlerName);
bridgeHandler.handler(mWebView.getContext(),data, new CallBack(callbackId));
}
//change to main thread
mMainHandler.post(new Runnable() {
@Override
public void run() {

if(mBridge.getMessageHandlers().containsKey(handlerName)){
BridgeHandler bridgeHandler = mBridge.getMessageHandlers().get(handlerName);
bridgeHandler.handler(mWebView.getContext(),data, new CallBack(callbackId));
}
}
});

}

public class CallBack implements CallBackFunction{
Expand Down

0 comments on commit 9b32628

Please sign in to comment.