# 独立进程页面支持
虽然现在支持单个进程运行多个不同的 core 版本,但还是有些 core 版本不支持与其他 core 同进程运行,所以需要新的进程去运行。
使用mMainPageProxy.setJSViewController()
接口去实现启动独立进程小程序:
public class MainActivity extends AppCompatActivity {
private MainPageProxy mMainPageProxy;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMainPageProxy = new MainPageProxy(this);
mMainPageProxy.onCreate(savedInstanceState);
/**
* 添加新进程运行小程序的能力。由于 {@code DefaultJSViewController} 需要{@code JSViewParent}对象
* ,所以需要在 {@code mMainPageProxy.onCreate} 之后调用。
*/
mMainPageProxy.setJSViewController(new DefaultJSViewController(mMainPageProxy.getJSViewParent()) {
/**
* 当需要新开一个进程时这个方法会被调用。
* 比如 js 里使用 openWindow() 打开一个小程序,如果 sdk 发现这个小程序的 core 需要使用新的进程才能运行,就会调用这个方法
* @param miniAppParams 小程序的启动参数
* @return 是否成功启动新进程
*/
@Override
public boolean openMiniAppInNewTab(MiniAppParams miniAppParams) {
try {
// 启动独立进程的 activity
Intent intent = new Intent(mJSViewParent.getContext(), MySubPageActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 传入小程序启动参数
intent.putExtras(miniAppParams.toBundle());
mJSViewParent.getContext().startActivity(intent);
}catch (Exception e){
e.printStackTrace();
return false;
}
return true;
}
});
}
...
}
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
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
MySubPageActivity.java
代码示例:
package com.example.jsviewsample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Process;
import android.view.KeyEvent;
import com.tvcode.js_view_app.DefaultJSViewController;
import com.tvcode.js_view_app.MainPageProxy;
import com.tvcode.js_view_app.bean.MiniAppParams;
public class MySubPageActivity extends Activity {
protected MainPageProxy mMainPageProxy = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMainPageProxy = new MainPageProxy(this);
// 设置dev tools的端口,默认不设置的话端口是9326
mMainPageProxy.setDebugPort(9376);
mMainPageProxy.onCreate(savedInstanceState);
mMainPageProxy.setJSViewController(new DefaultJSViewController(mMainPageProxy.getJSViewParent()) {
@Override
public boolean openMiniAppInNewTab(MiniAppParams miniAppParams) {
// TODO 如果这个进程也想有再开新进程的能力,就在这实现
return false;
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(mMainPageProxy != null) {
mMainPageProxy.onNewIntent(intent);
}
}
@Override
protected void onStart() {
super.onStart();
if(mMainPageProxy != null)
mMainPageProxy.onStart();
}
@Override
protected void onResume() {
super.onResume();
if(mMainPageProxy != null)
mMainPageProxy.onResume();
}
@Override
protected void onPause() {
if(mMainPageProxy != null)
mMainPageProxy.onPause();
super.onPause();
}
@Override
protected void onStop() {
if(mMainPageProxy != null)
mMainPageProxy.onStop();
super.onStop();
}
@Override
protected void onDestroy() {
if(mMainPageProxy != null)
mMainPageProxy.onDestroy();
super.onDestroy();
Process.killProcess(Process.myPid());
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(mMainPageProxy !=null && mMainPageProxy.dispatchKeyEvent(event))
return true;
return super.dispatchKeyEvent(event);
}
}
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
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
最后记得在AndroidManifest.xml
注册 activity:
<activity android:name=".MySubPageActivity"
android:process=":subpage1"
android:launchMode="singleInstance"
android:theme="@style/SplashThemeType0"/>
1
2
3
4
2
3
4