創建第一個Helloworld項目,現在來分析運行機制
MainActivity.java
??我們已經將MainActivity導入到了eclipse中。打開scr下com.example.hello下的MainActivity.java
public class MainActivity extends CordovaActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// enable Cordova apps to be started in the background
Bundle extras = getIntent().getExtras();
if (extras != null && extras.getBoolean("cdvStartInBackground", false)) {
moveTaskToBack(true);
}
// Set by <content src="index.html" /> in config.xml
loadUrl(launchUrl);
}
}
loadUrl(launchUrl);會在當前的WebView中去加載首頁,當然這個首頁是我們自己配置的,在res/xml/config.xml中。<content src="index.html" />。這個路徑都是指的assets/www下的路徑。
這樣這個app啟動的時候會首先調用這個MainActivity(當然這是在AndroidManifest.xml中配置的),然后Activity啟動的時候會將index.html加載在其WebView中,然后我們就看到了Cordova的頁面。
index.html
...
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
...
??在顯示這個index頁面的時候,會加載兩個js文件。cordova.js就是cordova的api,調用原生內容用的,相當于jar包。
index.js
var app = {
// 初始化方法,會調用綁定事件的方法
initialize: function() {
this.bindEvents();
},
// 綁定事件的方法,事件可以是這些:
// 'load', 'deviceready', 'offline', and 'online'.
//該事件是在 cordova 載入完成后發生的事件,它表示cordova 加載完成并準備訪問,yourCallbackFunction,相當于程序的入口功能
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready 后事件處理
onDeviceReady: function() {
app.receivedEvent('deviceready');
},
// 事件處理,更新DOM,改變兩個元素的css
receivedEvent: function(id) {
var parentElement = document.getElementById(id);
var listeningElement = parentElement.querySelector('.listening');
var receivedElement = parentElement.querySelector('.received');
listeningElement.setAttribute('style', 'display:none;');
receivedElement.setAttribute('style', 'display:block;');
console.log('Received Event: ' + id);
}
};
//調用初始化方法
app.initialize();
??加載index.js之后,程序會首先調用初始化方法,初始化的時候會去綁定事件監聽:document.addEventListener('deviceready', this.onDeviceReady, false);
??deviceready事件:該事件是在 cordova 載入完成后發生的事件,它表示cordova 加載完成并準備訪問,你傳進去的回調函數,相當于程序的入口函數。
??當cordova準備好的時候,會去首先執行你傳進去的回調函數,這里是onDeviceReady()。這個方法會改變DOM元素的css樣式。
??最終效果就是,當cordova沒有加載完的時候,頁面上Apache Cordova下面那里顯示的是:Connecting to Device(背景是灰色)。加載完之后,cordova準備好之后,原來顯示的消失,現在顯示的是:Device is Ready(背景是綠色)