2016-05-07 27 views
3

私のWebビューでローカルHTMLコンテンツを読み込もうとしています。しかし、時にはそれがコンテンツを読み込まなかった代わりに、空白の画面が表示されます。それは5回の積み込みごとに発生します。Android WebviewでHTMLが読み込まれない場合があります。

私のHTMLコンテンツは、ロードしようとしていますOfficial 2048 Source codeです。マニフェストファイルの上

  1. 入れのハードウェアアクセラレーション:

    以下は、私が問題を解決するには、以下の事を試してみました今までの私の活動のソースコード

    public class GameActivity extends AppCompatActivity { 
    
    private WebView mWebView; 
    
    @SuppressWarnings("ConstantConditions") 
    @SuppressLint({ "SetJavaScriptEnabled", "NewApi", "ShowToast"}) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, 
          WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
    
        setContentView(R.layout.activity_game); 
    
        Toolbar toolbar = (Toolbar) findViewById(R.id.game_toolbar); 
        if (toolbar != null) { 
         setSupportActionBar(toolbar); 
         ActionBar actionBar = getSupportActionBar(); 
         if (actionBar != null) { 
          actionBar.setDisplayHomeAsUpEnabled(true); 
         } 
        } 
    
        // Load webview with game 
        mWebView = (WebView) findViewById(R.id.mainWebView); 
        WebSettings settings = mWebView.getSettings(); 
        String packageName = getPackageName(); 
        settings.setJavaScriptEnabled(true); 
        settings.setDomStorageEnabled(true); 
        settings.setDatabaseEnabled(true); 
        settings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
        if (Build.VERSION.SDK_INT >= 19) { 
         // chromium, enable hardware acceleration 
         mWebView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
        } else { 
         // older android version, disable hardware acceleration 
         mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        } 
    
        // Since the database path is automatically handled by Chromium Webkit, 
        // we should not mention the db path for greater than KitKat version 
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
         settings.setDatabasePath("/data/data/" + packageName + "/databases"); 
        } 
        mWebView.addJavascriptInterface(new WebInterface2048(this), "Android"); 
        // If there is a previous instance restore it in the webview 
        if (savedInstanceState != null) { 
         mWebView.restoreState(savedInstanceState); 
        } else { 
         mWebView.loadUrl("file:///android_asset/2048/index.html"); 
        } 
    } 
    
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) { 
         case android.R.id.home: 
          finish(); 
          break; 
        } 
        return super.onOptionsItemSelected(item); 
    } 
    
    public class WebInterface2048 { 
        Context mContext; 
    
        public WebInterface2048(Context context) { 
         mContext = context; 
        } 
    
        @JavascriptInterface 
        public void showToast(String toast) { 
         Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); 
        } 
    } 
    } 
    

    です。

  2. 有効と無効アクティビティ内のハードウェアアクセラレーション。
  3. shouldOverrideUrlLoading
  4. 内の同じURLをリローデッド)は(ONSTART内のURLをロードしようとしました代わりのonCreate(の)

しかし、何も私のために働いているように見えるん。

私のログ:

D/OpenGLRenderer: endAllActiveAnimators on 0xb7d7e248 (RippleDrawable) with handle 0xb76b0cf0 
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. 
D/cr_Ime: [InputMethodManagerWrapper.java:30] Constructor 
W/cr_AwContents: onDetachedFromWindow called when already detached. Ignoring 
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: false 
I/cr_Ime: ImeThread is not enabled. 
W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 18631 
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: true 
D/cr_Ime: [InputMethodManagerWrapper.java:68] hideSoftInputFromWindow 
D/OpenGLRenderer: endAllActiveAnimators on 0xb7a893f8 (RippleDrawable) with handle 0xb7ec8810 
I/AppCompatViewInflater: app:theme is now deprecated. Please move to using android:theme instead. 
D/cr_Ime: [InputMethodManagerWrapper.java:30] Constructor 
W/cr_AwContents: onDetachedFromWindow called when already detached. Ignoring 
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: false 
I/cr_Ime: ImeThread is not enabled. 
W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 18631 
D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: true 
D/cr_Ime: [InputMethodManagerWrapper.java:68] hideSoftInputFromWindow 

追加情報:マイデバイスは

+0

あなたのwebviewにmatch_parentが幅と高さの両方で設定されていますか? – mmark

+0

@ mmark、はいそれはmatch_parentを持っています。 –

答えて

0

は、コードの残りの部分から、この分離株を試してみてくださいモトG3(アンドロイド6.0.1)です。テストするためにそれを作り出してください。 saveinstancestateは必ずしもnullではないのでロードされません。 mWebView.loadUrl("file:///android_asset/2048/index.html");

+0

すでに完了しています。しかし、この解決方法も機能しません。 –

+0

これを試してみてくださいBindingManagerを検索しました:definedVisibility()を呼び出せません - あなたのログに2回表示されるので、pid:18631の接続は見たことがありません。私は空白の画面のこのサイトでこれについてのいくつかのリンクを発見した。 http://stackoverflow.com/questions/30875099/cannot-call-dnectvisibility-never-saw-a-connection-for-pid –

+0

私はjQueryをまったく使用していません。したがって、ライブラリを更新する必要はありません。 –

2

これはなぜ起こっているのか分かりません。しかし、回避策として、私はコードの下に使用して、この問題から出てきた:私は別のスレッドで実行している場合

mWebView.postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      mWebView.loadUrl("file:///android_asset/2048/index.html"); 
     } 
    }, 500); 

代わりに、メインスレッドにURLをロードする、それが私のために働きました。

上記の回避策は、問題に直面している人にとって、最初に読み込んだときにWebViewが空白で表示され、読み込み時にコンテンツを読み込む場合に役立ちます。

解決策ごとにprob =ではないかもしれませんが、効果があります。誰かがより良い解決策を見つけたら、投稿してください。

関連する問題