闪屏完全白了吗?

闪屏完全白了吗?,第1张

概述基本上,我有一个启动屏幕,显示用户启动应用程序的时间.初始屏幕应该打开一个网站(稍后显示的网站),以下载所有字体和图像以进行缓存,以使首次运行该应用程序时所有内容运行起来更加流畅.但是目前您所看到的只是一个白色屏幕,该代码可以正常工作(经过测试),但是它显示的是白色的初

基本上,我有一个启动屏幕,显示用户启动应用程序的时间.初始屏幕应该打开一个网站(稍后显示的网站),以下载所有字体和图像以进行缓存,以使首次运行该应用程序时所有内容运行起来更加流畅.
但是目前您所看到的只是一个白色屏幕,该代码可以正常工作(经过测试),但是它显示的是白色的初始屏幕,而不是带有徽标和一些文本的屏幕.

这是代码;
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线程以切换到下一个活动来进行.

这样,用户将可以看到某些东西,然后在背景中,当用户欣赏您的初始屏幕时,其他东西也会发生.

您是否可以将初始屏幕内容嵌入到应用程序的已下载/安装的程序包中,以便始终快速显示它们而不受数据连接的存在或速度的影响?通常,应用程序都有一个简单的启动屏幕,“烧入”已安装的程序包,因此无论设备是否能够到达其自身之外,它们都可以显示一些内容.

总结

以上是内存溢出为你收集整理的闪屏完全白了吗?全部内容,希望文章能够帮你解决闪屏完全白了吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1074349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存