-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathBaseSubBundleActivity.java
More file actions
92 lines (75 loc) · 2.95 KB
/
BaseSubBundleActivity.java
File metadata and controls
92 lines (75 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.example;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactRootView;
import com.facebook.react.bridge.CatalystInstance;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.common.LifecycleState;
/**
* Created by desmond on 4/17/17.
*/
public abstract class BaseSubBundleActivity extends Activity {
private ReactRootView mReactRootView;
private final class LoadScriptTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
CatalystInstance instance = Utils.getCatalystInstance(getReactNativeHost());
Utils.loadScriptFromAsset(BaseSubBundleActivity.this,
instance,
getScriptAssetPath());
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
getReactNativeHost().getReactInstanceManager().attachMeasuredRootView(mReactRootView);
Utils.setViewAttached(mReactRootView, true);
}
}
private ReactNativeHost getReactNativeHost() {
return ((ReactApplication) getApplication()).getReactNativeHost();
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
Utils.setJsModuleName(mReactRootView, getMainComponentName());
setContentView(mReactRootView);
ReactInstanceManager manager = getReactNativeHost().getReactInstanceManager();
LifecycleState state = manager.getLifecycleState();
switch (state) {
case BEFORE_CREATE:
case BEFORE_RESUME:
default:
if (!manager.hasStartedCreatingInitialContext()) {
manager.createReactContextInBackground();
}
manager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext reactContext) {
loadScriptAsync();
}
});
break;
case RESUMED:
loadScriptAsync();
break;
}
}
private void loadScriptAsync() {
LoadScriptTask task = new LoadScriptTask();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
protected void onDestroy() {
ReactInstanceManager manager = getReactNativeHost().getReactInstanceManager();
manager.detachRootView(mReactRootView);
super.onDestroy();
}
protected abstract String getScriptAssetPath();
protected abstract String getMainComponentName();
}