android - 网页在活动前显示 2 秒
问题描述
我正在从我的 android 应用程序加载一个网络应用程序。在 URL 的初始加载中,它会重定向到登录页面,登录后,它将移动到 Web 应用程序的主屏幕。但预期的行为是在登录后将其重定向到 Native Homescreeb。因此,我已经编写了通过比较 URL 在 onPageFinished 中启动新活动的意图。但它会在移动到 Activity 之前显示网页 2 秒钟。我试着在那个案子上隐藏 Webview。然后显示一个空白屏幕 2 秒并显示一个 Activity。请参阅下面的实现,如果有任何问题,请纠正我。
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
try {
String loadingURL =request.getUrl().toString();
view.loadUrl(request.getUrl().toString());
} catch (Exception e) {
}
return true;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
try{
handler.proceed();
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if(url.contains("https://login.microsoftonline.com/"))
{
mWebview.setVisibility(View.VISIBLE);
}
else if(url.contains(GlobalDeclarations.BASE_URL_WEBAPP_DEV) )
{
progress_div.setVisibility(View.VISIBLE);
mWebview.setVisibility(View.GONE);
}
}
@Override
public void onPageCommitVisible(WebView view, String url) {
super.onPageCommitVisible(view, url);
Log.d("onPageCommitVisible", "onPageCommitVisible" + url);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
if (mWebview.getProgress() == 100) {
if(url.contains(GlobalDeclarations.BASE_URL_WEBAPP_DEV))
{
mWebview.setVisibility(View.GONE);
}
else
{
mWebview.setVisibility(View.VISIBLE);
}
progress_div.setVisibility(View.GONE);
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("onPageFinished", "onPageFinished URL........ " + url );
mWebview.evaluateJavascript("common.setFromApp(" + true + ")", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
if (value.equals("false"))
{
mWebview.setVisibility(View.GONE);
Intent intent = new Intent(view.getContext(), BaseActivity.class);
startActivity(intent);
}
else
{
mWebview.setVisibility(View.VISIBLE);
}
}
});
解决方案
嗯,这就是逻辑行为,你已经请求了新的网页,然后一些网络 I/O 的东西会获取它,然后WebView
会消耗返回的数据并绘制它。然后onPageFinished
被调用,在其中你调用了一些额外的 JS(执行也可能增加一些额外的毫秒)
您唯一的方法是制作一些“加载视图”并在WebView
可见性设置为时显示它GONE
,因为此操作必须花费一些时间来连接和处理数据WebView
,这很重且效率不高(与本机视图/绘图相比)
顺便提一句。使用 logcat 并将一些行放入调用的覆盖方法中,您将看到并测量加载时间
Log.i("webview_log", "methodName called at "+System.currentTimeMillis());
推荐阅读
- visual-studio - 防止 MSBuild 编译特定的 Typescript 文件
- string - 使用带有单元格数组的 regexprep 来格式化冒号
- swift - 斯威夫特:使用 as / as 进行强制转换有什么区别?/ 作为!关键字和 C 风格的演员表?
- c# - 将文本放在 mysql 数据库中的 listview 列中?
- javascript - 根据匹配的 ID 合并两个数组中的项目
- reactjs - 如何从 mapDispatchToProps 中的 ajax 调用获取响应数据
- java - 如何到达某个JSlider的面板?
- vue.js - 工具提示期间的 Vue 插槽激活器正在重新渲染我的 v-icon
- cmake - 如何将环境变量传递给 ExternalProject_Add CONFIGURE_COMMAND?
- php - 作曲家安装,缺少 ext-dom - LEMP Centos 7