2017-07-14 52 views
0

我有一個應用程序,它是一個webview應用程序。它加載了一個HTML頁面,我使用了一些JS和Jquery。但最近我在模擬器上得到這個警告:跳過773幀!應用程序可能在其主線程上做了太多工作。 [ANDROID WEBVIEW]

跳過773幀!應用程序可能在其主線程上做了太多工作。

掛起所有線程了:14.255ms

背景粘併發標記掃描GC釋放38341(1813KB) AllocSpace對象,8(160KB)LOS對象,0%的遊離,11MB/11MB,已暫停 46.590ms總800.341ms

暫停所有線程了:35.225ms

嘗試刪除非本地JNI參考,傾銷線程

暫停所有線程了:224.94 6ms的

背景部分併發標記掃描GC釋放100(3KB)AllocSpace 對象,0(0B)LOS對象,25%的遊離,11MB/15MB,65.153ms總 423.872ms

掛起所有線程了暫停:19.208ms

跳過了152幀! 應用程序可能在其主線程上做了太多工作。

而這一直持續下去,直到index.html加載。

這是MainActivity.java:

package checker.coin.crypto.wingcrony.by.cryptocoinchecker; 

import android.app.Activity; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

import com.google.android.gms.common.api.GoogleApiClient; 

public class MainActivity extends Activity { 

    private GoogleApiClient client; 
    private WebView view; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     view = (WebView) this.findViewById(R.id.webView); 
     view.getSettings().setJavaScriptEnabled(true); 
     view.getSettings().setDomStorageEnabled(true); 
     view.setWebViewClient(new MyBrowser()); 
     view.loadUrl("file:///android_asset/www/index.html"); //try js alert 
     view.setWebChromeClient(new WebChromeClient()); // adding js alert support 


    } 

    private class MyBrowser extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mailto:") || url.startsWith("mms:") || url.startsWith("mmsto:") || url.startsWith("market:") || url.equals("http://wingcrony.com/?actie=donate")) { 
       Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
       startActivity(intent); 
       return true; 
      } 
      else { 
       view.loadUrl(url); 
       return true; 
      } 
     } 
    } 

    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { 
      view.goBack(); //method goback() 
      return true; 
     } 

     return super.onKeyDown(keyCode, event); 
    } 
} 

離開是否有multieThread網頁視圖或任何讓它工作得更快?

+0

嘗試將第一個'loadUrl'移動到後臺任務。這可能是它抱怨的。 –

+0

你能解釋一下我的例子嗎?因爲我不知道如何在後臺加載它。就像你看到它只需要加載一個網址沒有更多 – Steven

+0

這就是我所指的:[Android:AsyncTask](https://developer.android.com/reference/android/os/AsyncTask.html)。這可以用來將該部分卸載到不同的線程中,所以主線程不會跳過幀並保持連續。 –

回答

0

我添加了一個splashscreen來提高速度。

view.setWebViewClient(new MyBrowser() { 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       //hide loading image 
       findViewById(R.id.imageLoading1).setVisibility(View.GONE); 
       //show webview 
       findViewById(R.id.webView).setVisibility(View.VISIBLE); 
      } 


     }); 
相關問題