2012-04-05 11 views
3

基本的には、ユーザーがいつアプリを起動するかを示すスプラッシュ画面があります。スプラッシュスクリーンは、ウェブサイト(後で表示されるウェブサイト)を開いて、すべてのフォントと画像をキャッシュにダウンロードして、アプリケーションを初めて実行するときにすべてが円滑になるようにします。 しかし、現時点では白い画面が表示されていますが、コードは動作します(テストしました)が、ロゴとテキストの代わりに白いスプラッシュ画面が表示されます。スプラッシュ画面が完全に白いですか?

ここにコードがあります。私はonResumesetContentView(R.layout.main)行が問題の原因かもしれないと思う
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

setContentView(R.layout.splash)onCreateに既に電話していますので、onResumeに再度電話する必要はありません。あなたのmain.xmlの外観はわかりませんが、空白のレイアウトかもしれません。

+0

私はonResume全体を削除しました。迅速な答えをありがとう。しかし、今はいつでも、私はアプリケーションを起動すると、スプラッシュ画面が表示されます。スプラッシュが既に表示されているかどうかを確認するブール値を設定する必要がありますか? – Unidan

+0

SharedPreferencesにブール値を保存することがその方法の1つですが、@ Corinが述べたように、必ずしも正しいデータをキャッシュしているとは限りません。たとえば、そのサイトがダウンしているときにアプリケーションを読み込んだり、接続していないときに、スプラッシュ画面が表示されないようにフラグを設定すると、必要なデータがキャッシュされませんでした。ここでのユースケースの詳細はわかりませんが、考慮する必要があることについて言及したかっただけです。 – Aldryd

0

ページがあまりにも速く読み込まれましたか? コンテンツをロードする前に3-5秒でタイマーはどうですか?

3

私はほとんどダウンロードするために必要なものは何でもするまでが最終的にダウンロードされた、通常のデスクトップブラウザでopening your URLを試してみましたが、かなり長い間表示され、絶対に何も得ませんでした。したがって、遅延の問題があります。

ウェブビューは変な獣です。私にはHTML(またはあなたの場合は外部URL)を渡しているようで、loadUrlコールからほぼ即座に戻ります。次に、別のスレッドで、Webビューはレンダリングしたいものを見つけ出し、それをレンダリングします。したがって、loadURL()呼び出しが戻るときと実際に更新されるときの間にはしばしば遅延があります。私のアプリケーションでは、HTML/CSSがすべて1つの文字列になっているので、「ダウンロード」の遅延はなく、まだ画面の表示とWebビューのレンダリングの間に知覚可能な遅延が存在する可能性があります。

そして、あなたのサイトは、Webビューの自然遅延に追加するダウンロードの遅延を持っているように見えます。私は、Webビューが可視化されていると思われます。まだ表示するものがないので空白の白い画面をレンダリングし、外部のWebサイトからHTMLをダウンロードし、空の画面を表示します次のアクティビティがonPageFinished()Webビュークライアントメソッドを介して呼び出されることを除いて、すべてがダウンロードされ、画面上に何かをレンダリングする準備ができています。

スレッドに影響を与える別のUIが実行中(次のアクティビティの開始)であるため、実際には上書きされることを知っているため、実際には画面を更新しません。したがって、新しいアクティビティが開始され、onCreate()、onStart()などの一連の呼び出しが完了すると、画面が空白になって最終的に画面が更新されます。

したがって、スプラッシュ画面は表示されません。 Webビューでは、次のアクティビティが画面を制御するため、画面を更新する機会はありません。

残念ながら、私はあなたのアプローチは欠陥があると思います。私はアプローチを2つに分割するほうが良いと思います。スプラッシュスクリーンを本当にシンプルなものでロードしてからバックグラウンドスレッドを実行するとデータがダウンロードされます。バックグラウンドスレッドがすべてを完了したら、二次アクティビティを呼び出します。理想的には、UIスレッドへの呼び出しを送信して次のアクティビティに切り替えることが理想的です。

このようにすると、ユーザーは何かを見て、背景にはユーザーがスプラッシュ画面に感心している間に他のことが起こります。

アプリケーションのダウンロード/インストールされたパッケージにスプラッシュ画面のコンテンツを埋め込んで、データ接続の有無やスピードの影響を受けずにすばやく表示できるかどうかを確認してください。多くの場合、アプリは簡単なスプラッシュ画面を使って、インストールされたパッケージを「燃やす」ようにして、デバイスが自らの外部に到達する能力に関係なく何かを表示することができます。

+0

ねえ。答えをありがとう!今すぐスプラッシュ画面が表示され、実際にはWebコンテンツがキャッシュされますが、スプラッシュ後に白い画面が0.5秒表示されますが、私はその画面でライブできます。今、問題はスプラッシュ画面が毎回表示されることですコンテンツがキャッシュされていてもアプリが開かれるので、何をすべきか把握しようとしています。私は 'SharedPreferences'について考えていましたが、最初にもう少し詳しく読む必要があります。 – Unidan

+0

キャッシュされたコンテンツは、必要なデータを持っていることを認識するのに十分な情報が外部Webサーバーから取得された後に、適切なコンテンツであることがわかります。あなたはURLが繰り返しUR1であり、その背後にあるコンテンツは変更されていないが、webviewはそうではないことを知っている - それを把握するために外部Webサーバーとやり取りしなければならず、またはデータネットワーク(待ち時間)が遅い。 – Colin

関連する問題