Skip to content

Commit

Permalink
#update webview
Browse files Browse the repository at this point in the history
  • Loading branch information
wumeng1 authored and wumeng1 committed Aug 9, 2021
1 parent f900f97 commit 855ae39
Show file tree
Hide file tree
Showing 15 changed files with 152 additions and 37 deletions.
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<activity
android:name=".WebActivity"
android:launchMode="singleTask"
android:process=":webview"
android:process="@string/webview_process"
android:screenOrientation="portrait"
android:theme="@style/WebViewTheme" />
<activity android:name=".recycelerview.GridListActivity" />
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/mirkowu/mvm/MVMApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public void onCreate() {
LogUtil.init(BuildConfig.DEBUG);

//WebView初始化多进程
WebViewUtil.initMultiProcess(this);
WebViewUtil.init(this, true);

//换成你自己的bugly账号
BuglyManager.init(this, "3e2cd9bf87", BuildConfig.DEBUG);
Expand Down
5 changes: 3 additions & 2 deletions app/src/main/java/com/mirkowu/mvm/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@ import android.view.View
import com.mirkowu.lib_base.adapter.FragmentBasePagerAdapter
import com.mirkowu.lib_base.mediator.EmptyMediator
import com.mirkowu.lib_base.util.bindingView
import com.mirkowu.lib_bugly.UpgradeDialog
import com.mirkowu.lib_bugly.BuglyManager
import com.mirkowu.lib_bugly.UpgradeDialog
import com.mirkowu.lib_util.utilcode.util.NetworkUtils
import com.mirkowu.lib_util.utilcode.util.ToastUtils
import com.mirkowu.lib_webview.CommonWebActivity
import com.mirkowu.mvm.base.BaseActivity
import com.mirkowu.mvm.mvc.MVCActivity
import com.mirkowu.mvm.mvp.MVPActivity
Expand Down Expand Up @@ -93,7 +94,7 @@ class MainActivity : BaseActivity<EmptyMediator>() {
fun webNetClick(view: View?) {
// CommonWebActivity.start(context, "ces", "http://www.baid")
// WebViewActivity.start(context, "ces", "https://x5.tencent.com/docs/questions.html")
WebActivity.start(
CommonWebActivity.start(
context,
"标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题",
"http://www.baidu.com/"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/com/mirkowu/mvm/base/BaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,6 @@ public Resources getResources() {


protected void adaptScreenSize(@NonNull Resources superResources) {
AutoSizeManager.autoConvertActivity(superResources, this);
AutoSizeManager.autoConvertActivity(super.getResources(), this); //如果没有自定义需求用这个方法
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class WidgetDemoActivity : BaseActivity<EmptyMediator>(), CustomAdapt {
}
binding.btnBottomList.click {
BottomListDialog()
.setData(mutableListOf("测试环境", "测试环境", "测试环境", "测试环境"))
.setData(mutableListOf<CharSequence>("测试环境", "测试环境", "测试环境", "测试环境"))
//.setTitle("标题")
// .setMarginHor(20).setMarginVer(20)
.show(supportFragmentManager)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class UpgradeDialog extends BaseDialog implements DownloadListener, Upgra
public static void show(FragmentManager manager, UpgradeInfo upgradeInfo) {
UpgradeDialog dialog = new UpgradeDialog();
dialog.upgradeInfo = upgradeInfo;
dialog.show(manager);
dialog.showAllowingStateLoss(manager);
}

public UpgradeDialog() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.mirkowu.lib_screen.internal.CustomAdapt;
import com.mirkowu.lib_screen.internal.IAutoAdapt;
import com.mirkowu.lib_util.LogUtil;
import com.mirkowu.lib_util.utilcode.util.ThreadUtils;

import java.util.Locale;

Expand Down Expand Up @@ -57,6 +58,9 @@ public static void init(Application application) {
* @param activity
*/
public static void autoConvertStrategy(Object target, Activity activity) {
if (!ThreadUtils.isMainThread()) {
return;
}
//如果 target 实现 CustomAdapt 接口表示该 target 想自定义一些用于适配的参数, 从而改变最终的适配效果
if (target instanceof IAutoAdapt && target instanceof CustomAdapt) {
LogUtil.d(TAG, String.format(Locale.ENGLISH, "%s implemented by %s!", target.getClass().getName(), CustomAdapt.class.getName()));
Expand All @@ -80,6 +84,9 @@ public static void autoConvertStrategy(Object target, Activity activity) {
* @param activity
*/
public static void autoConvertActivity(Resources superResources, Activity activity) {
if (!ThreadUtils.isMainThread()) {
return;
}
if (activity instanceof IAutoAdapt && activity instanceof CustomAdapt) {
AutoSizeCompat.autoConvertDensityOfCustomAdapt(superResources, (CustomAdapt) activity);
} else if (activity instanceof IAutoAdapt) {
Expand All @@ -96,6 +103,9 @@ public static void autoConvertActivity(Resources superResources, Activity activi
* @param fragment
*/
public static void autoConvertFragment(Resources superResources, Fragment fragment) {
if (!ThreadUtils.isMainThread()) {
return;
}
if (fragment instanceof IAutoAdapt && fragment instanceof CustomAdapt) {
AutoSizeCompat.autoConvertDensityOfCustomAdapt(superResources, (CustomAdapt) fragment);
} else if (fragment instanceof IAutoAdapt) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static void show(FragmentManager manager, @NonNull IUpgradeInfo upgradeIn

UpgradeDialog dialog = new UpgradeDialog();
dialog.upgradeInfo = upgradeInfo;
dialog.show(manager);
dialog.showAllowingStateLoss(manager);
}


Expand Down
7 changes: 5 additions & 2 deletions lib_webview/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@
### 使用

```
//初始化WebView
WebViewUtil.initMultiProcess(this);
//初始化WebView, 默认在当前进程
WebViewUtil.init(this);
//初始化WebView, 启用新的进程
WebViewUtil.init(this,true);
```

### 功能
Expand Down
10 changes: 8 additions & 2 deletions lib_webview/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,18 @@
<activity
android:name=".CommonWebActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:process=":webview"
android:screenOrientation="portrait"
android:theme="@style/WebViewTheme" />
<activity
android:name=".CommonWebMultiProcessActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:process="@string/webview_process"
android:screenOrientation="portrait"
android:theme="@style/WebViewTheme" />

<service
android:name=".service.EmptyService"
android:process=":webview" />
android:process="@string/webview_process" />

<!-- 该Service仅在TBS内核首次Dex加载时触发并执行dex2oat任务,任务完成后自动结束。-->
<service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import com.mirkowu.lib_webview.client.BaseWebViewClient;
import com.mirkowu.lib_webview.config.WebConfig;
import com.mirkowu.lib_webview.setting.WebSettingUtil;
import com.mirkowu.lib_webview.util.WebViewUtil;
import com.mirkowu.lib_widget.Toolbar;
import com.tencent.smtt.sdk.WebSettings;

Expand All @@ -29,19 +30,31 @@
* 通用的WebView
* 1.支持X5
* 2.支持JsBridge
*
* 如果需要自定义的,可继承此Activity 或使用 {@link CommonWebFragment}
* 如需开启多进程,请记得在AndroidManifest.xlm中注册 process
*/
public class CommonWebActivity extends BaseMVMActivity {
public static final String KEY_TITLE = "title";
public static final String KEY_URL = "url";

public static void start(Context context, String title, String url) {
start(context, title, url, WebViewUtil.getUseMultiProcess());
}

public static void start(Context context, String title, String url, boolean newProcess) {
if (TextUtils.isEmpty(url)) {
return;
}
Intent starter = new Intent(context, CommonWebActivity.class);
Intent starter;
if (newProcess) {
starter = new Intent(context, CommonWebMultiProcessActivity.class);
starter.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
starter = new Intent(context, CommonWebActivity.class);
}
starter.putExtra(KEY_TITLE, title);
starter.putExtra(KEY_URL, url);
starter.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(starter);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.mirkowu.lib_webview;


import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;

/**
* 通用的WebView
* 1.支持X5
* 2.支持JsBridge
*/
public class CommonWebMultiProcessActivity extends CommonWebActivity {
public static void start(Context context, String title, String url) {
if (TextUtils.isEmpty(url)) {
return;
}
Intent starter = new Intent(context, CommonWebMultiProcessActivity.class);
starter.putExtra(KEY_TITLE, title);
starter.putExtra(KEY_URL, url);
starter.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(starter);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,6 @@ public class EmptyService extends Service {
@Override
public void onCreate() {
super.onCreate();
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// startForeground(1, new Notification());
// }
}

@Nullable
Expand All @@ -33,8 +30,14 @@ public IBinder onBind(Intent intent) {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Notification notification = NotificationUtils.getNotification(
// NotificationUtils.ChannelConfig.DEFAULT_CHANNEL_CONFIG, null
// );
// startForeground(1, notification);
// }
stopSelf();
return super.onStartCommand(intent, flags, startId);
return START_NOT_STICKY;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import com.mirkowu.lib_util.LogUtil;
import com.mirkowu.lib_util.utilcode.util.ProcessUtils;
import com.mirkowu.lib_webview.CommonWebView;
import com.mirkowu.lib_webview.R;
import com.mirkowu.lib_webview.service.EmptyService;
import com.tencent.smtt.export.external.TbsCoreSettings;
import com.tencent.smtt.sdk.CookieManager;
Expand All @@ -24,36 +25,89 @@
import java.util.HashMap;

/**
* 这个处理webview初始化、cookie同步、删除缓存清除等。
* 这个处理WebView初始化、cookie同步、删除缓存清除等。
*/
public class WebViewUtil {
private static final String DOMAIN_URL = "xxx.xxx.com";
private static boolean sUseMultiProcess = false; //该静态参数,可在多进程模式下使用,因为会赋值

/**
* 初始化
* 初始化WebView 保证只初始化一次
* 建议在onCreate 中调用
*
* @param application
*/
public static void initMultiProcess(Application application) {
public static void init(Application application) {
init(application, false);
}

/**
* 初始化WebView 保证只初始化一次
* 建议在onCreate 中调用
* <p>
* 如果要使用多进程 则需要调用此方法初始化进程,否则第一次打开会白屏一会
*
* @param application
* @param useMultiProcess 是否使用多进程
*/
public static void init(Application application, boolean useMultiProcess) {
String mainProcessName = application.getPackageName();
init(application, useMultiProcess, mainProcessName + application.getString(R.string.webview_process));
}

/**
* 可自定义进程名称
*
* @param application
* @param useMultiProcess 是否使用多进程
* @param processName 指定进程名 默认: 包名:webview ,如需自定义,记得在AndroidManifest.xlm中注册process
*/
public static void init(Application application, boolean useMultiProcess, String processName) {
sUseMultiProcess = useMultiProcess;
configWebViewCacheDirWithAndroidP(application);
if (!ProcessUtils.isMainProcess()) {
//首次初始化冷启动优化 在调用TBS初始化、创建WebView之前进行如下配置
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);

//屏蔽X5频繁收集手机敏感信息数据 imsi 和 imei
QbSdk.disableSensitiveApi();
//初始化环境
QbSdk.initX5Environment(application.getApplicationContext(), null);
return;
String curProcessName = ProcessUtils.getCurrentProcessName();
String mainProcessName = application.getPackageName();
boolean isMainProcess = TextUtils.equals(curProcessName, mainProcessName);
if (useMultiProcess && TextUtils.equals(curProcessName, processName)) { //web进程初始化
sUseMultiProcess = true;
initX5Web(application);
}
if (isMainProcess) { //主进程初始化
initX5Web(application);
}
startMultiProcess(application);
if (isMainProcess && useMultiProcess) {
startMultiProcess(application);
}
}

/**
* 获取是否使用了多进程
*
* @return
*/
public static boolean getUseMultiProcess() {
return sUseMultiProcess;
}

/**
* 初始化X5浏览器
*
* @param application
*/
private static void initX5Web(Application application) {
//首次初始化冷启动优化 在调用TBS初始化、创建WebView之前进行如下配置
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);

//屏蔽X5频繁收集手机敏感信息数据 imsi 和 imei
QbSdk.disableSensitiveApi();
//初始化环境
QbSdk.initX5Environment(application.getApplicationContext(), null);
}

/**
* 提前启动多进程
* 提前创建新的进程,防止WebView第一次启动时白屏
*
* @param context
*/
Expand Down
3 changes: 2 additions & 1 deletion lib_webview/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<resources>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="webview_process" tools:ignore="MissingTranslation">:webview</string>
<string name="webview_chooser_camera">Take Photo</string>
<string name="webview_chooser_album">Choose From Album</string>
<string name="webview_lack_storage_permission">The app lacks "storage permission", which is temporarily unavailable. If necessary, click ok to go to the Settings center for authorization. </string>
Expand Down

0 comments on commit 855ae39

Please sign in to comment.