基本上,我有一个启动屏幕,显示用户启动应用程序的时间.初始屏幕应该打开一个网站(稍后显示的网站),以下载所有字体和图像以进行缓存,以使首次运行该应用程序时所有内容运行起来更加流畅.
但是目前您所看到的只是一个白色屏幕,该代码可以正常工作(经过测试),但是它显示的是白色的初始屏幕,而不是带有徽标和一些文本的屏幕.
这是代码;
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); }}
解决方法:
我只是在普通的台式机浏览器中尝试了opening your URL,但相当长一段时间都没有任何显示,几乎要下载所有需要下载的内容.因此存在延迟问题.
网页视图是一种奇怪的野兽.在我看来,您给它提供了HTML(或者在您的情况下为外部URL),并且它几乎立即从loadUrl调用返回.然后,在另一个线程上,Web视图找出要渲染的内容,然后进行渲染.因此,在loadURL()调用返回和屏幕实际更新之间通常会有延迟.在我的应用程序中,我将HTML / CSS全部放在一个字符串中,因此没有“下载”延迟,但是在屏幕显示和Web视图呈现之间仍然可以感觉到延迟.
而且您的网站似乎有下载延迟,这会增加网络视图的自然延迟.我怀疑该网络视图已变得可见,它尚无任何显示,因此呈现空白/白色屏幕,然后从外部网站下载HTML /其他内容,仍然显示空白屏幕,直到出现所有下载的内容均已准备就绪,可以将内容呈现到屏幕上,但下一个活动是通过onPageFinished()Web视图客户端方法调用的.
UI线程似乎发现另一个影响线程的UI正在运行(下一个活动的开始),因此实际上不会更新屏幕,因为它知道该线程将被覆盖.因此,在新活动开始并完成其onCreate(),onStart()等调用序列以最终更新屏幕时,屏幕保持空白/白色.
因此,您将永远不会看到初始屏幕.网络视图没有机会更新屏幕,因为下一个活动将控制屏幕.
不幸的是,我认为您的方法是有缺陷的.我认为最好将方法分为两种-用真正简单的东西加载启动屏幕,然后在后台线程上进行数据下载.让后台线程在完成所有活动后调用辅助活动,最好是通过将调用发布到UI线程以切换到下一个活动来进行.
这样,用户将可以看到某些东西,然后在背景中,当用户欣赏您的初始屏幕时,其他东西也会发生.
您是否可以将初始屏幕内容嵌入到应用程序的已下载/安装的程序包中,以便始终快速显示它们而不受数据连接的存在或速度的影响?通常,应用程序都有一个简单的启动屏幕,“烧入”已安装的程序包,因此无论设备是否能够到达其自身之外,它们都可以显示一些内容.
总结以上是内存溢出为你收集整理的闪屏完全白了吗?全部内容,希望文章能够帮你解决闪屏完全白了吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)