[Java] Android硬件加速以及WebView的onPause,onResume,OnDestroy →→→→→进入此内容的聊天室

来自 , 2020-10-28, 写在 Java, 查看 138 次.
URL http://www.code666.cn/view/769ac34a
  1.  
  2. package cn.testwebview;  
  3. import java.util.Timer;  
  4. import java.util.TimerTask;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.ViewConfiguration;  
  8. import android.webkit.WebSettings;  
  9. import android.webkit.WebView;  
  10. import android.webkit.WebViewClient;  
  11. import android.webkit.WebSettings.PluginState;  
  12. import android.app.Activity;  
  13. import android.graphics.Bitmap;  
  14. /**
  15.  * Demo描述:
  16.  * 1 硬件加速的实现
  17.  * 2 WebView的暂停/回复、销毁
  18.  *  
  19.  * 参考资料:
  20.  * 1 http://stackoverflow.com/questions/5267639/how-to-safely-turn-webview-zooming-on-and-off-as-needed
  21.  * 2 http://qianxuechao.blog.163.com/blog/static/91813499201292541451358/
  22.  *   Thank you very much
  23.  */  
  24. public class MainActivity extends Activity {  
  25.     private WebView mWebView;  
  26.     private boolean isOnPause = false;  
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         setContentView(R.layout.main);  
  31.         hardwareAccelerate();  
  32.         initWebView();  
  33.     }  
  34.      
  35.     //硬件加速  
  36.     private void hardwareAccelerate(){  
  37.         if (this.getPhoneSDKInt() >= 14) {  
  38.             getWindow().setFlags(0x1000000, 0x1000000);  
  39.         }  
  40.     }  
  41.      
  42.     //设置WebView  
  43.     private void initWebView() {  
  44.         mWebView = (WebView) findViewById(R.id.webView);  
  45.         mWebView.setVerticalScrollBarEnabled(false);  
  46.         mWebView.setHorizontalScrollBarEnabled(false);  
  47.         mWebView.getSettings().setSupportZoom(true);  
  48.         mWebView.getSettings().setBuiltInZoomControls(true);  
  49.         mWebView.getSettings().setJavaScriptEnabled(true);  
  50.          
  51.         mWebView.getSettings().setDomStorageEnabled(true);  
  52.         mWebView.getSettings().setPluginsEnabled(true);  
  53.         mWebView.requestFocus();  
  54.          
  55.         //以下两句和硬件加速有关  
  56.         mWebView.getSettings().setPluginState(PluginState.ON);  
  57.         mWebView.getSettings().setAllowFileAccess(true);  
  58.          
  59.         mWebView.getSettings().setUseWideViewPort(true);  
  60.         mWebView.getSettings().setLoadWithOverviewMode(true);  
  61.         mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);  
  62.          
  63.         mWebView.loadUrl("http://www.cdmetro.cn/");  
  64.         mWebView.setWebViewClient(new TestWebViewClient());  
  65.     }  
  66.      
  67.      
  68.     /**
  69.      * 当Activity执行onPause()时让WebView执行pause
  70.      */  
  71.     @Override  
  72.     protected void onPause() {  
  73.         super.onPause();  
  74.         try {  
  75.             if (mWebView != null) {  
  76.                 mWebView.getClass().getMethod("onPause").invoke(mWebView, (Object[]) null);  
  77.                 isOnPause = true;  
  78.             }  
  79.  
  80.         } catch (Exception e) {  
  81.             e.printStackTrace();  
  82.         }  
  83.     }  
  84.      
  85.     /**
  86.      * 当Activity执行onResume()时让WebView执行resume
  87.      */  
  88.     @Override  
  89.     protected void onResume() {  
  90.         super.onResume();  
  91.         try {  
  92.             if (isOnPause) {  
  93.                 if (mWebView != null) {  
  94.                     mWebView.getClass().getMethod("onResume").invoke(mWebView, (Object[]) null);  
  95.                 }  
  96.                 isOnPause = false;  
  97.             }  
  98.         } catch (Exception e) {  
  99.             e.printStackTrace();  
  100.         }  
  101.     }  
  102.      
  103.     /**
  104.      * 该处的处理尤为重要:
  105.      * 应该在内置缩放控件消失以后,再执行mWebView.destroy()
  106.      * 否则报错WindowLeaked
  107.      */  
  108.     @Override  
  109.     protected void onDestroy() {  
  110.         super.onDestroy();  
  111.         if (mWebView != null) {  
  112.             mWebView.getSettings().setBuiltInZoomControls(true);  
  113.             mWebView.setVisibility(View.GONE);  
  114.             long delayTime = ViewConfiguration.getZoomControlsTimeout();  
  115.             new Timer().schedule(new TimerTask() {  
  116.                 @Override  
  117.                 public void run() {  
  118.                     mWebView.destroy();  
  119.                     mWebView = null;  
  120.                 }  
  121.             }, delayTime);  
  122.  
  123.         }  
  124.         isOnPause = false;  
  125.     }  
  126.      
  127.      
  128.     private class TestWebViewClient extends WebViewClient{  
  129.         @Override  
  130.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  131.             super.onPageStarted(view, url, favicon);  
  132.         }  
  133.         @Override  
  134.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  135.             view.loadUrl(url);  
  136.             return true;  
  137.         }  
  138.         @Override  
  139.         public void onPageFinished(WebView view, String url) {  
  140.             super.onPageFinished(view, url);  
  141.              
  142.         }  
  143.         @Override  
  144.         public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {  
  145.             super.onReceivedError(view, errorCode, description, failingUrl);  
  146.         }  
  147.     }  
  148.      
  149.     public int getPhoneSDKInt() {  
  150.         int version = 0;  
  151.         try {  
  152.             version = Integer.valueOf(android.os.Build.VERSION.SDK);  
  153.         } catch (NumberFormatException e) {  
  154.             e.printStackTrace();  
  155.         }  
  156.         return version;  
  157.     }  
  158. }  
  159.  
  160.  
  161. //java/7814

回复 "Android硬件加速以及WebView的onPause,onResume,OnDestroy"

这儿你可以回复上面这条便签

captcha