mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-04 22:40:47 +08:00
WebWorkers: New c++ interface for NativeRunnable
Reviewed By: mhorowitz, lexs Differential Revision: D2779083 fb-gh-sync-id: dc36b71504b4e74b1671bb48f72d001c9c87721b
This commit is contained in:
committed by
facebook-github-bot-3
parent
7d70b86a7b
commit
cf350a69de
@@ -9,20 +9,19 @@
|
||||
|
||||
package com.facebook.react.bridge.queue;
|
||||
|
||||
import com.facebook.jni.Countable;
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
|
||||
/**
|
||||
* A Runnable that has a native run implementation.
|
||||
*/
|
||||
@DoNotStrip
|
||||
public class NativeRunnable extends Countable implements Runnable {
|
||||
public class NativeRunnable implements Runnable {
|
||||
|
||||
/**
|
||||
* Should only be instantiated via native (JNI) code.
|
||||
*/
|
||||
@DoNotStrip
|
||||
private NativeRunnable() {
|
||||
private final HybridData mHybridData;
|
||||
|
||||
private NativeRunnable(HybridData hybridData) {
|
||||
mHybridData = hybridData;
|
||||
}
|
||||
|
||||
public native void run();
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*/
|
||||
|
||||
package com.facebook.react.bridge.queue;
|
||||
|
||||
import com.facebook.jni.Countable;
|
||||
import com.facebook.jni.HybridData;
|
||||
import com.facebook.proguard.annotations.DoNotStrip;
|
||||
|
||||
/**
|
||||
* A Runnable that has a native run implementation.
|
||||
*/
|
||||
@DoNotStrip
|
||||
public class NativeRunnableDeprecated extends Countable implements Runnable {
|
||||
|
||||
@DoNotStrip
|
||||
private NativeRunnableDeprecated() {
|
||||
}
|
||||
|
||||
public native void run();
|
||||
}
|
||||
44
ReactAndroid/src/main/jni/react/jni/JNativeRunnable.h
Normal file
44
ReactAndroid/src/main/jni/react/jni/JNativeRunnable.h
Normal file
@@ -0,0 +1,44 @@
|
||||
// Copyright 2004-present Facebook. All Rights Reserved.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
using namespace facebook::jni;
|
||||
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
class Runnable : public JavaClass<Runnable> {
|
||||
public:
|
||||
static constexpr auto kJavaDescriptor = "Ljava/lang/Runnable;";
|
||||
};
|
||||
|
||||
/**
|
||||
* The c++ interface for the Java NativeRunnable class
|
||||
*/
|
||||
class JNativeRunnable : public HybridClass<JNativeRunnable, Runnable> {
|
||||
public:
|
||||
static auto constexpr kJavaDescriptor = "Lcom/facebook/react/bridge/queue/NativeRunnable;";
|
||||
|
||||
void run() {
|
||||
m_runnable();
|
||||
}
|
||||
|
||||
static void registerNatives() {
|
||||
javaClassStatic()->registerNatives({
|
||||
makeNativeMethod("run", JNativeRunnable::run),
|
||||
});
|
||||
}
|
||||
private:
|
||||
friend HybridBase;
|
||||
|
||||
JNativeRunnable(std::function<void()> runnable)
|
||||
: m_runnable(std::move(runnable)) {}
|
||||
|
||||
std::function<void()> m_runnable;
|
||||
};
|
||||
|
||||
} }
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <react/Bridge.h>
|
||||
#include <react/Executor.h>
|
||||
#include <react/JSCExecutor.h>
|
||||
#include "JNativeRunnable.h"
|
||||
#include "JSLoader.h"
|
||||
#include "ReadableNativeArray.h"
|
||||
#include "ProxyExecutor.h"
|
||||
@@ -780,6 +781,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
NativeArray::registerNatives();
|
||||
ReadableNativeArray::registerNatives();
|
||||
WritableNativeArray::registerNatives();
|
||||
JNativeRunnable::registerNatives();
|
||||
|
||||
registerNatives("com/facebook/react/bridge/NativeMap", {
|
||||
makeNativeMethod("initialize", map::initialize),
|
||||
@@ -861,7 +863,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||
|
||||
});
|
||||
|
||||
jclass nativeRunnableClass = env->FindClass("com/facebook/react/bridge/queue/NativeRunnable");
|
||||
jclass nativeRunnableClass = env->FindClass("com/facebook/react/bridge/queue/NativeRunnableDeprecated");
|
||||
runnable::gNativeRunnableClass = (jclass)env->NewGlobalRef(nativeRunnableClass);
|
||||
runnable::gNativeRunnableCtor = env->GetMethodID(nativeRunnableClass, "<init>", "()V");
|
||||
wrap_alias(nativeRunnableClass)->registerNatives({
|
||||
|
||||
Reference in New Issue
Block a user