大家好,我是博客小白,第一篇文章,文筆不好,務噴,希望能給各位提供點幫助
公司做個商城,然后我就簡單的做個啟動引導頁,然后用個原生WebView套一下,加個加載動畫,解決下第三方登錄支付的返回問題,這些問題以前也搞過,哎喲,倆小時,一個項目OK了,沾沾自喜中。
然后過了幾天,老板就開始反饋,APP加載太慢了,滑動卡頓,然后叫我組解決。然后我想了下,已經設置了延時加載圖片,你這個圖片那么多,卡卡的怪我咯,想了想,哎,想在下面這個方法中搞個圖片壓縮替代
1 @Override 2 public WebResourceResponse shouldInterceptRequest(WebView webView, String s) { 3 return super.shouldInterceptRequest(webView, s); 4 }
然后,我忘記了百度搜索什么鬼的時候,在一個貼吧看到了騰訊X5內核,替代系統內核,然后我果斷搜索下了官網 http://x5.tencent.com/tbs/
(Ps: 這編輯器什么鬼啊,怎么沒有url輸入啊,還有,我編輯了html代碼,加了個<a>標簽為什么不管用)
哎喲,不錯啊,高大上啊,趕緊下個demo,看着套一下,挺高大上的,你們看 ↓↓↓↓↓↓↓↓↓↓↓↓
哇,簡直了對吧,哈哈,就你了。
下載官方demo,然后,怎么是個eclipse的版本啊,而且只有這一個,這簡直不能配上馬總的高大上啊,哎喲算了,先導入運行再說。
導入as后,配置下gradle,導入jar包,so庫,哎喲,騰訊就是騰訊啊,資源,代碼一個錯誤沒有,用gradlew build打個包瞅瞅唄。
咦,報錯了,這個錯誤見過很多次,資源錯誤,模塊沖突,都爆這個錯誤, 應該是包導入有問題吧。
然后,我懷疑我遇到個假騰訊網站,不說了,貼圖
資源清單里面有4個activity沒有定義,握草什么鬼,你認真的找了一遍,jar看完也沒有這些activity啊,嘖嘖嘖,注釋掉也跑不了
然后我再次百度了下騰訊X5內核官網,百度上這一個X5官網,就這個,握草,騰訊,馬總,看在我為你花了那么多錢的份上,你就這么對待我這位金主的么
哎,官網靠不住,馬上上百度。
在百度瞅了瞅,然后順便集成下,下面我就和各位說下我的集成步驟(可用)。
1. 導入jar包,和so庫
2. 用到的所有原生WebView導入的類和接口都改導入 com.tencent.smtt.sdk 里面的類,類接口名對應
3. AndroidManifest.xml里加入權限聲明:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
4. 初始化X5內核。
// 在 application 里面加入 @Override public void onCreate() { super.onCreate(); preinitX5WebCore(); //預加載x5內核 Intent intent = new Intent(this, AdvanceLoadX5Service.class); startService(intent); } private void preinitX5WebCore() { if (!QbSdk.isTbsCoreInited()) { QbSdk.preInit(getApplicationContext(), null);// 設置X5初始化完成的回調接口 } } // x5 init service public class AdvanceLoadX5Service extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); initX5(); } private void initX5() { // 預加載X5內核 QbSdk.initX5Environment(getApplicationContext(), cb); } QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { @Override public void onViewInitFinished(boolean arg0) { // TODO Auto-generated method stub //初始化完成回調 } @Override public void onCoreInitFinished() { // TODO Auto-generated method stub } }; }
握草, 能用了,好感動 , 哈哈哈哈
然后還有就是,它右邊自帶滾動條小方塊,用WebView去滾動的方法沒軟用,↓↓↓↓↓
mMainWebView.setHorizontalScrollBarEnabled(false); mMainWebView.setVerticalScrollBarEnabled(false); //下面方法去掉 IX5WebViewExtension ix5 = mMainWebView.getX5WebViewExtension(); if (null != ix5) { ix5.setScrollBarFadingEnabled(false); }
好了,經過上面的配置,x5能搞了
說下x5內核優點:
1. 原生WebView自帶不支持git圖片 x5支持
2. 恩,加載快很多,它對圖片壓縮加載了
3. 顯示的時候,就是回調 onPageFinished() 這個的時候,界面已經很流暢了,這個boos肥腸滿意
4. x5看在我帥的面子上沒給我報錯,恩,好東西
我想說下第三方登錄支付返回的問題和我的解決方案:
1. 我在 WebViewClient 接口的 onPageStarted() 用 ListView 保存非本公司的所有url (如果你問我為啥不在onPageFinished,也行我會告訴你我樂意,不不不,放onPageFinished有問題,別問我為什么,我不知道,你打印這倆個地方的url,特喵的少了幾個url)
2. 我在onBackPressed() 里面搞了點事,至於什么事,不好解釋呀,貼代碼吧
@Override public void onBackPressed() { if (mMainWebView.canGoBack()) { int index = mGoBackUrlList.size(); if (index == 0 || index == 1) { mMainWebView.goBack(); mGoBackUrlList.clear(); } else { if (mMainWebView.canGoBackOrForward(-index)) { mMainWebView.goBackOrForward(-index); mGoBackUrlList.clear(); } else { mMainWebView.goBack(); mGoBackUrlList.clear(); } } } else { super.onBackPressed(); } }
暫時能用,沒人教我,只好用笨方法了 (PS:我想噴一下銀聯網頁在線支付,你特么是大爺,進去了不綁定銀行卡,不支付你特么就不然退是吧,行吧,大爺)
好了,就到這了,上面返回的問題,有人曉得不,能告訴下我不。 哎喲,謝謝哥幾位啦
(小弟菜鳥一枚,來到新地方,多有得罪,別見怪哈)