プラットフォーム間PhoneGapテクノロジーアーキテクチャ2:PhoneGap下位原理(上)
7054 ワード
PhoneGapの基礎原理を説明するには、PhoneGapのいくつかの重要なクラスを説明する必要があります.
DroidGapクラス:
DroidGapはインタフェースCordovaInterfaceの実装クラスであり、Android Activityを継承し、Android Activityのライフサイクル全体を有する.DroidGapはActivityのonCreate()、onPause()、onResume()、onDestroyを上書きしています
などの方法があります.
その中の1つの重要な方法はloadUrl(String url)、つまりあなたのActivityでsuperです.loadUrl()で呼び出されるメソッド.この方法が重要なのは,この方法をPhoneGapの入口手紙と見なすことができるからである.
数を数える.PhoneGapはloadUrlで初期化作業を行い、init()関数に呼び出されます.
Init()はWebViewの設定などの重要な作業を完了し,これはPhoneGapの下位原理を理解する上で重要な役割を果たす.コードから、初期化時にまずインスタンス化されていることがわかります.
CordovaWebViewタイプのwebViewオブジェクトです.ここのCordovaWebViewはAndroid WebViewクラスを継承しています.後述します.その後、異なるパラメータを入力してinit()方を再ロードします.
法.
入力パラメータには、WebView、CordovaWebViewClientタイプのWebViewClientオブジェクト、CordovaChromeClientタイプChromeClientペアが含まれます.
象.CordovaWebViewClientとCordovaChromeClientはそれぞれAndroid WebViewClientとChromeClientクラスを継承しており、この2つのクラスは後述する.
ここの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()
もう遅いから、今日はここまでにしておこう.
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()
もう遅いから、今日はここまでにしておこう.