プラットフォーム間PhoneGapテクノロジーアーキテクチャ2:PhoneGap下位原理(上)

7054 ワード

PhoneGapの基礎原理を説明するには、PhoneGapのいくつかの重要なクラスを説明する必要があります.
DroidGapクラス:
        
public class DroidGap extends Activity implements CordovaInterface {...}

 
DroidGapはインタフェースCordovaInterfaceの実装クラスであり、Android Activityを継承し、Android Activityのライフサイクル全体を有する.DroidGapはActivityのonCreate()、onPause()、onResume()、onDestroyを上書きしています
などの方法があります.
 1     /**
 2      * Load the url into the webview.
 3      *
 4      * @param url
 5      */
 6     public void loadUrl(String url) {
 7 
 8         // Init web view if not already done
 9         if (this.appView == null) {
10             this.init();
11         }
12 
13         // Set backgroundColor
14         this.backgroundColor = this.getIntegerProperty("backgroundColor", Color.BLACK);
15         this.root.setBackgroundColor(this.backgroundColor);
16 
17         // If keepRunning
18         this.keepRunning = this.getBooleanProperty("keepRunning", true);
19 
20         // Then load the spinner
21         this.loadSpinner();
22 
23         this.appView.loadUrl(url);
24     }

その中の1つの重要な方法はloadUrl(String url)、つまりあなたのActivityでsuperです.loadUrl()で呼び出されるメソッド.この方法が重要なのは,この方法をPhoneGapの入口手紙と見なすことができるからである.
数を数える.PhoneGapはloadUrlで初期化作業を行い、init()関数に呼び出されます.
    /**
     * Create and initialize web container with default web view objects.
     */
    public void init() {
        CordovaWebView webView = new CordovaWebView(DroidGap.this);
        this.init(webView, new CordovaWebViewClient(this, webView), new CordovaChromeClient(this, webView));
    }

Init()はWebViewの設定などの重要な作業を完了し,これはPhoneGapの下位原理を理解する上で重要な役割を果たす.コードから、初期化時にまずインスタンス化されていることがわかります.
CordovaWebViewタイプのwebViewオブジェクトです.ここのCordovaWebViewはAndroid WebViewクラスを継承しています.後述します.その後、異なるパラメータを入力してinit()方を再ロードします.
法.
入力パラメータには、WebView、CordovaWebViewClientタイプのWebViewClientオブジェクト、CordovaChromeClientタイプChromeClientペアが含まれます.
象.CordovaWebViewClientとCordovaChromeClientはそれぞれAndroid WebViewClientとChromeClientクラスを継承しており、この2つのクラスは後述する.
 1    /**
 2      * Initialize web container with web view objects.
 3      *
 4      * @param webView
 5      * @param webViewClient
 6      * @param webChromeClient
 7      */
 8     public void init(CordovaWebView webView, CordovaWebViewClient webViewClient, CordovaChromeClient webChromeClient) {
 9         LOG.d(TAG, "DroidGap.init()");
10 
11         // Set up web container
12         this.appView = webView;
13         this.appView.setId(100);
14 
15         this.appView.setWebViewClient(webViewClient);
16         this.appView.setWebChromeClient(webChromeClient);
17         webViewClient.setWebView(this.appView);
18         webChromeClient.setWebView(this.appView);
19 
20         this.appView.setLayoutParams(new LinearLayout.LayoutParams(
21                 ViewGroup.LayoutParams.MATCH_PARENT,
22                 ViewGroup.LayoutParams.MATCH_PARENT,
23                 1.0F));
24 
25         // Add web view but make it invisible while loading URL
26         this.appView.setVisibility(View.INVISIBLE);
27         this.root.addView(this.appView);
28         setContentView(this.root);
29 
30         // Clear cancel flag
31         this.cancelLoadUrl = false;
32 
33     }

ここのappViewもCordovaWebViewタイプで、DroidGapクラスの属性です.appViewを初期化しましたが、appViewは実際には先ほどインスタンス化されました
WebViewは、WebViewClientとChromeClientをそれぞれ先ほどの入力パラメータWebViewClientとChromeClientに設定します.
なぜこの2つのClientを設定したのか理解できない人もいるかもしれません.ここではまずAndroidオリジナルの観点からWebViewコンポーネントとWebViewClientとChromeClientの2つのクラスの
違い:
WebViewコンポーネント
WebViewコンポーネントは、実質的にモバイルデバイスの内蔵ブラウザです.WebViewというビルトインブラウザの特性は、Webがコストをかけてパッケージ化できるクライアントの基礎であり、HTML 5、CSS 3のページレイアウトを容易にすることができます.
モバイルWebテクノロジーの利点は、オリジナル開発に比べて優れています.
PhoneGapは異なるプラットフォームのWebViewに対して拡張とパッケージングを行い、WebViewというコンポーネントをデバイスのローカルAPIにアクセスできる強力なブラウザにしたので、開発者はPhoneGapフレームワークの下で
JavaScriptはデバイスのローカルAPIにアクセスします.
  WebViewClient
WebViewClientは、WebViewが様々な通知、要求イベントを処理するのを支援します.具体的には、onLoadResource()
        onPageStarted()
        onPageFinished()
        onReceiveError()
        onReceivedHttpAuthRequest()
  WebChromeClient
WebChromeClientは、WebViewJavascriptの処理を支援するダイアログ、Webサイトアイコン、Webサイトtitle、ロードの進捗など
onCloseWindow(WebViewを閉じる)
        onCreateWindow()
onJsAlert(WebViewでalertは弾けないので、WebChromeClient処理ポップアップをカスタマイズする必要があります)
        onJsPrompt()
        onJsConfirm()
        onProgressChanged()
        onReceivedIcon()
        onReceivedTitle()
もう遅いから、今日はここまでにしておこう.