基本上我有一个启动画面,显示用户启动应用程序的时间。启动画面应该打开一个网站(将在稍后显示的网站)下载所有字体和图像以缓存,以使第一次运行应用程序时一切运行更顺畅。 但是你所看到的只是一个白色的屏幕,代码工作(测试它),但它显示一个白色的闪屏,而不是一个带有徽标和一些文字的屏幕。
这是代码;
Splash.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#4A4A4A">
<ImageView
android:id="@+id/logo"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:src="@drawable/logo"
android:layout_gravity="center" />
<TextView
android:text="@string/loading"
android:layout_gravity="center"
android:textColor="#FFA500"
android:textSize="15dp"
android:typeface="normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<WebView
android:id="@+id/splashview"
android:layout_width="0px"
android:layout_height="0px"
android:layout_weight="0" />
</LinearLayout>
Splash.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Splash extends Activity {
@Override
protected void onCreate(Bundle savedInstance) {
// TODO Auto-generated method stub
super.onCreate(savedInstance);
setContentView(R.layout.splash);
WebView webView = (WebView) findViewById(R.id.splashview);
webView.setWebChromeClient(new WebChromeClient());
webView.loadUrl("http://ngmat.site90.net/matsedel/");
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
Intent NGMat = new Intent("android.intent.category.SECONDARY");
startActivity(NGMat);
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
finish();
}
@Override
protected void onResume() {
super.onResume();
setContentView(R.layout.main);
}
}
答案 0 :(得分:3)
我只是在普通的桌面浏览器中尝试了opening your URL,并且在相当长的时间内几乎没有显示任何内容,几乎直到最终下载了需要下载的内容。所以存在延迟问题。
网络视图是一个奇怪的野兽。在我看来,你给它HTML(或在你的情况下是一个外部URL),它几乎立即从loadUrl调用返回。然后在另一个线程上,Web视图会确定要呈现的内容,然后呈现它。因此,loadURL()调用返回和屏幕实际更新之间经常会有延迟。在我的应用程序中,我将HTML / CSS全部放在一个字符串中,因此没有“下载”延迟,但仍然可以在屏幕显示和Web视图呈现之间出现明显的延迟。
您的网站似乎有下载延迟,以添加到网络视图的自然延迟。我怀疑Web视图是可见的,它没有任何东西可以显示,所以渲染一个空白/白色屏幕,然后从外部网站下载HTML /任何东西,仍然显示一个空白屏幕,直到它有下载了所有内容,并准备好在屏幕上呈现内容,但通过onPageFinished()Web视图客户端方法调用下一个活动。
UI线程似乎弄清楚另一个影响线程的UI正在运行(下一个活动的开始),因此实际上并没有更新屏幕,因为它知道它无论如何都会被覆盖。因此,当新活动开始时,您的屏幕保持空白/白色,并完成其onCreate(),onStart()等调用序列,最终更新屏幕。
因此,你永远不会看到你的闪屏。 Web视图没有机会更新屏幕,因为下一个活动控制了屏幕。
不幸的是,我认为你的方法存在缺陷。我认为最好将方法拆分为两个 - 用简单的东西加载启动画面,然后在后台线程导致数据下载发生。让后台线程在完成所有操作后调用辅助活动,最好是通过调用UI线程切换到下一个活动。
通过这种方式,用户可以看到某些内容,然后在后台,当用户欣赏启动画面时,会发生其他事情。
您是否可以将启动画面内容嵌入应用程序的下载/安装包中,以便始终快速显示,而不受数据连接或速度的影响?通常,应用程序会有一个简单的启动画面“烧入”已安装的软件包,这样无论设备是否能够到达外部,它们都可以显示。
答案 1 :(得分:0)
我认为setContentView(R.layout.main)
中的onResume
行可能会导致问题。您已在setContentView(R.layout.splash)
中呼叫onCreate
,因此您无需再次在onResume
中再次呼叫它。不确定你的main.xml是什么样的,但看起来它可能只是一个空白的布局。
答案 2 :(得分:0)
也许页面加载太快了? 在开始加载内容之前3-5秒计时器怎么样?