Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit 7c2782a

Browse files
committed
Change native network module logic and improve Android fs performance
1 parent 8e98636 commit 7c2782a

File tree

13 files changed

+319
-266
lines changed

13 files changed

+319
-266
lines changed

src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java

Lines changed: 73 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@
99
import com.facebook.react.bridge.ReadableMap;
1010

1111
import java.util.Map;
12+
import java.util.concurrent.LinkedBlockingQueue;
13+
import java.util.concurrent.ThreadPoolExecutor;
14+
import java.util.concurrent.TimeUnit;
1215

1316
public class RNFetchBlob extends ReactContextBaseJavaModule {
1417

1518
static ReactApplicationContext RCTContext;
19+
static LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>();
20+
static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 5000, TimeUnit.MILLISECONDS, taskQueue);
1621

1722
public RNFetchBlob(ReactApplicationContext reactContext) {
1823

@@ -31,17 +36,29 @@ public Map<String, Object> getConstants() {
3136
}
3237

3338
@ReactMethod
34-
public void createFile(String path, String content, String encode, Callback callback) {
35-
RNFetchBlobFS.createFile(path, content, encode, callback);
39+
public void createFile(final String path, final String content, final String encode, final Callback callback) {
40+
threadPool.execute(new Runnable() {
41+
@Override
42+
public void run() {
43+
RNFetchBlobFS.createFile(path, content, encode, callback);
44+
}
45+
});
46+
3647
}
3748

3849
@ReactMethod
39-
public void createFileASCII(String path, ReadableArray dataArray, Callback callback) {
40-
RNFetchBlobFS.createFileASCII(path, dataArray, callback);
50+
public void createFileASCII(final String path, final ReadableArray dataArray, final Callback callback) {
51+
threadPool.execute(new Runnable() {
52+
@Override
53+
public void run() {
54+
RNFetchBlobFS.createFileASCII(path, dataArray, callback);
55+
}
56+
});
57+
4158
}
4259

4360
@ReactMethod
44-
public void writeArrayChunk(String streamId, ReadableArray dataArray, Callback callback) {
61+
public void writeArrayChunk(final String streamId, final ReadableArray dataArray, final Callback callback) {
4562
RNFetchBlobFS.writeArrayChunk(streamId, dataArray, callback);
4663
}
4764

@@ -61,8 +78,14 @@ public void exists(String path, Callback callback) {
6178
}
6279

6380
@ReactMethod
64-
public void cp(String path, String dest, Callback callback) {
65-
RNFetchBlobFS.cp(path, dest, callback);
81+
public void cp(final String path, final String dest, final Callback callback) {
82+
threadPool.execute(new Runnable() {
83+
@Override
84+
public void run() {
85+
RNFetchBlobFS.cp(path, dest, callback);
86+
}
87+
});
88+
6689
}
6790

6891
@ReactMethod
@@ -96,18 +119,34 @@ public void removeSession(ReadableArray paths, Callback callback) {
96119
}
97120

98121
@ReactMethod
99-
public void readFile(String path, String encoding, Promise promise) {
100-
RNFetchBlobFS.readFile(path, encoding, promise);
122+
public void readFile(final String path, final String encoding, final Promise promise) {
123+
threadPool.execute(new Runnable() {
124+
@Override
125+
public void run() {
126+
RNFetchBlobFS.readFile(path, encoding, promise);
127+
}
128+
});
101129
}
102130

103131
@ReactMethod
104-
public void writeFileArray(String path, ReadableArray data, boolean append, Promise promise) {
105-
RNFetchBlobFS.writeFile(path, data, append, promise);
132+
public void writeFileArray(final String path, final ReadableArray data, final boolean append, final Promise promise) {
133+
threadPool.execute(new Runnable() {
134+
@Override
135+
public void run() {
136+
RNFetchBlobFS.writeFile(path, data, append, promise);
137+
}
138+
});
106139
}
107140

108141
@ReactMethod
109-
public void writeFile(String path, String encoding, String data, boolean append, Promise promise) {
110-
RNFetchBlobFS.writeFile(path, encoding, data, append, promise);
142+
public void writeFile(final String path, final String encoding, final String data, final boolean append, final Promise promise) {
143+
threadPool.execute(new Runnable() {
144+
@Override
145+
public void run() {
146+
RNFetchBlobFS.writeFile(path, encoding, data, append, promise);
147+
}
148+
});
149+
111150
}
112151

113152
@ReactMethod
@@ -121,21 +160,28 @@ public void stat(String path, Callback callback) {
121160
}
122161

123162
@ReactMethod
124-
public void scanFile(ReadableArray pairs, Callback callback) {
125-
int size = pairs.size();
126-
String [] p = new String[size];
127-
String [] m = new String[size];
128-
for(int i=0;i<size;i++) {
129-
ReadableMap pair = pairs.getMap(i);
130-
if(pair.hasKey("path")) {
131-
p[i] = pair.getString("path");
132-
if(pair.hasKey("mime"))
133-
m[i] = pair.getString("mime");
134-
else
135-
m[i] = null;
163+
public void scanFile(final ReadableArray pairs, final Callback callback) {
164+
final ReactApplicationContext ctx = this.getReactApplicationContext();
165+
threadPool.execute(new Runnable() {
166+
@Override
167+
public void run() {
168+
int size = pairs.size();
169+
String [] p = new String[size];
170+
String [] m = new String[size];
171+
for(int i=0;i<size;i++) {
172+
ReadableMap pair = pairs.getMap(i);
173+
if(pair.hasKey("path")) {
174+
p[i] = pair.getString("path");
175+
if(pair.hasKey("mime"))
176+
m[i] = pair.getString("mime");
177+
else
178+
m[i] = null;
179+
}
180+
}
181+
new RNFetchBlobFS(ctx).scanFile(p, m, callback);
136182
}
137-
}
138-
new RNFetchBlobFS(this.getReactApplicationContext()).scanFile(p, m, callback);
183+
});
184+
139185
}
140186

141187
@ReactMethod

src/android/src/main/java/com/RNFetchBlob/RNFetchBlobConst.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@ public class RNFetchBlobConst {
1010
public static final String EVENT_PROGRESS = "RNFetchBlobProgress";
1111
public static final String EVENT_HTTP_STATE = "RNFetchBlobState";
1212
public static final String FILE_PREFIX = "RNFetchBlob-file://";
13-
public static final MediaType MIME_OCTET = MediaType.parse("application/octet-stream");
14-
public static final MediaType MIME_MULTIPART = MediaType.parse("multipart/form-data");
15-
public static final MediaType MIME_ENCODED = MediaType.parse("application/x-www-form-urlencoded");
1613
public static final String FILE_PREFIX_BUNDLE_ASSET = "bundle-assets://";
1714
public static final String FILE_PREFIX_CONTENT = "content://";
1815
public static final String DATA_ENCODE_URI = "uri";
19-
public static final String DATA_ENCODE_BASE64 = "base64";
20-
public static final String DATA_ENCODE_UTF8 = "utf8";
16+
public static final String RNFB_RESPONSE_BASE64 = "base64";
17+
public static final String RNFB_RESPONSE_UTF8 = "utf8";
18+
public static final String RNFB_RESPONSE_PATH = "path";
19+
2120
}

0 commit comments

Comments
 (0)