偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

OPhone平臺(tái)架構(gòu)和主要開發(fā)組件

移動(dòng)開發(fā)
OPhone平臺(tái)基于Linux和開放手機(jī)聯(lián)盟(OHA)的Android系統(tǒng),經(jīng)過中國移動(dòng)的創(chuàng)新研發(fā),設(shè)計(jì)出擁有新穎獨(dú)特的用戶操作界面,增強(qiáng)了瀏覽器能力和WAP兼容性。

OPhone平臺(tái)的架構(gòu)

OPhone平臺(tái)由底層操作系統(tǒng)、本地系統(tǒng)庫、OPhone運(yùn)行環(huán)境、Widget運(yùn)行環(huán)境、應(yīng)用程序框架和應(yīng)用程序等部分組成。OPhone平臺(tái)結(jié)構(gòu)圖如圖1所示:


OPhone平臺(tái)基于Linux 2.6版內(nèi)核,內(nèi)核為上層系統(tǒng)提供了安全、內(nèi)存管理、線程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型等系統(tǒng)服務(wù)。OPhone平臺(tái)強(qiáng)大的功能來源于底層的本地庫,包括多媒體引擎OpenCORE,瀏覽器引擎WebKit,2D圖形引擎SGL和關(guān)系型數(shù)據(jù)庫SQLite等。這些本地庫通過上層的應(yīng)用程序框架將編程接口提供給開發(fā)者調(diào)用,本地庫和應(yīng)用程序框架通過JNI(Java Native Interface)連接。OPhone平臺(tái)為應(yīng)用程序提供了一個(gè)開放的運(yùn)行環(huán)境,無論是內(nèi)置應(yīng)用程序,還是后續(xù)安裝的應(yīng)用程序,所有應(yīng)用程序訪問底層框架的能力是一致的,開發(fā)者可以使用應(yīng)用程序框架提供的API開發(fā)自己的應(yīng)用程序。
 
OPhone上的應(yīng)用程序模型

最新發(fā)布的OPhone 1.5平臺(tái)支持以下三種應(yīng)用程序,本文主要介紹OPhone應(yīng)用程序模型。

使用java語言編寫的OPhone應(yīng)用程序,以APK形式發(fā)布。

使用HTML、JavaScript等腳本語言編寫的Widget程序,以WGT形式發(fā)布。

使用java語言編寫的MIDlet程序,以jar/jad形式發(fā)布。

APK文件在Dalvik虛擬機(jī)內(nèi)運(yùn)行,Dalvik虛擬機(jī)與普通的Java虛擬機(jī)不同,它針對嵌入式設(shè)備進(jìn)行了優(yōu)化,class文件也經(jīng)過“dx”工具轉(zhuǎn)換成.dex文件格式,.dex文件格式更為緊湊,執(zhí)行效率更高。APK應(yīng)用程序運(yùn)行時(shí),OPhone會(huì)啟動(dòng)一個(gè)Linux進(jìn)程,應(yīng)用程序就運(yùn)行在自己的進(jìn)程之中。每一個(gè)進(jìn)程都擁有自己的一個(gè)Java虛擬機(jī),不同應(yīng)用程序的代碼都是單獨(dú)運(yùn)行的,不會(huì)相互影響。

APK是一種與zip文件格式兼容的文件。OPhone SDK提供了aapt工具,可以把類文件和資源文件打包成APK文件,打包過程包括class文件到dex文件的轉(zhuǎn)換、生成資源表、優(yōu)化文本格式的XML文件等工作。轉(zhuǎn)換過程如圖2所示:

主要開發(fā)組件

OPhone應(yīng)用程序通常由Activity、Content Provider、Service和BroadcastReceiver組成,雖然每項(xiàng)并非是必須的,但是掌握這些開發(fā)組件是學(xué)習(xí)OPhone應(yīng)用程序開發(fā)首要的任務(wù)。下面對OPhone應(yīng)用程序的主要開發(fā)組件逐一介紹。#t#

Activity

從表面上講,Activity是OPhone應(yīng)用程序的一個(gè)界面,用戶可以通過這個(gè)界面操作播放器,查看聯(lián)系人或者玩游戲。對開發(fā)者而言,Activity是OPhone應(yīng)用程序的入口,OPhone應(yīng)用程序模型沒有定義像main()這樣的入口方法,而是在Activity類中定義了一系列的生命周期方法,比如onCreate()、onResume()、onStart()、onPause()、onStop()和onDestroy(),OPhone系統(tǒng)會(huì)在適當(dāng)?shù)臅r(shí)候調(diào)用對應(yīng)的生命周期方法。這一點(diǎn)與Java ME平臺(tái)的MIDlet類似。#p#

OPhone的應(yīng)用程序模型打破了應(yīng)用程序之間的邊界,系統(tǒng)會(huì)為每個(gè)應(yīng)用程序維持一個(gè)堆棧,堆棧中放置Activity對象,應(yīng)用程序不但可以將APK中定義的Activity放入堆棧,還可以將其他應(yīng)用程序的Activity放入堆棧中。例如,可以通過調(diào)用startActivity()方法啟動(dòng)瀏覽器、撥打電話、瀏覽圖片等。例如,從應(yīng)用程序中調(diào)用Phone程序撥打電話的代碼如下所示:
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:10086"));
startActivity(intent);

這種特性極大的增加了平臺(tái)組件的復(fù)用性,你不需要單獨(dú)開發(fā)一個(gè)電話程序,也沒有必要單獨(dú)開發(fā)一個(gè)圖片瀏覽程序,只需要通過簡單的代碼調(diào)用系統(tǒng)已經(jīng)提供的Activity即可。

Content Provider 

Content Provider提供了在不同應(yīng)用程序間共享數(shù)據(jù)的機(jī)制。在OPhone系統(tǒng)中已經(jīng)預(yù)置了幾種Content Provider,向開發(fā)者提供音頻、視頻、圖片、聯(lián)系人和呼叫記錄等數(shù)據(jù)。如果這些數(shù)據(jù)使用數(shù)據(jù)庫接口來存儲(chǔ),那么將無法提供給其他的應(yīng)用程序使用。當(dāng)然,如果數(shù)據(jù)只是想在應(yīng)用程序內(nèi)部使用,就不應(yīng)該使用Content Provider,而使用數(shù)據(jù)庫或者文件等可以獲得更高效的讀/寫操作。

在android.provider包內(nèi)定義了一些類和接口,它們主要描述了內(nèi)置的幾個(gè)Content Provider的數(shù)據(jù)結(jié)構(gòu)。例如MediaStore.Audio定義了音頻數(shù)據(jù)的信息,CallLog.Calls則定義了通話記錄的信息。ContentProvider類提供了抽象的接口,允許應(yīng)用程序查詢,插入,刪除和更新其中的數(shù)據(jù)。下面的代碼可以從系統(tǒng)中查詢存儲(chǔ)在SD卡上的歌曲,如圖3所示:

  1. ContentResolver resolver = getContentResolver();   
  2. //從Content Provider中獲得SD卡上的音樂列表   
  3. cursor =resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); String[] cols = new String[] {   
  4. MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST,   
  5. };   
  6. int[] ids = new int[] { R.id.track_name, R.id.artist };   
  7. if (cursor != null) startManagingCursor(cursor);   
  8. //創(chuàng)建Adapter并綁定到ListView SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.songs_list, cursor, cols, ids);   
  9. setListAdapter(adapter);    

Service

Service是OPhone平臺(tái)非常重要的組件之一,它運(yùn)行在后臺(tái),不與用戶進(jìn)行交互。在默認(rèn)情況下,Service運(yùn)行在應(yīng)用程序進(jìn)程的主線程之中,如果需要在Service中處理一些網(wǎng)絡(luò)連接等耗時(shí)的操作,那么應(yīng)該將這些任務(wù)放在單獨(dú)的線程中處理,避免阻塞用戶界面。啟動(dòng)后的Service具有較高的優(yōu)先級,一般情況下,系統(tǒng)會(huì)保證Service的正常運(yùn)行。只有當(dāng)前臺(tái)的Activity正常運(yùn)行的資源被Service占用的情況下,系統(tǒng)才會(huì)暫時(shí)停止Service;當(dāng)系統(tǒng)重新獲得了資源后會(huì)自動(dòng)啟動(dòng)原來的Service。

如果想使用Service組件,需要擴(kuò)展android.app.Service類,并在AndroidManifest.xml文件中使用標(biāo)簽聲明。與Activity類似,Service中同樣定義了onCreate()、onStart()和onDestroy()等生命周期方法。當(dāng)其他組件通過Context.startService()方法啟動(dòng)Service時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)Service對象,并順序調(diào)用onCreate()方法和onStart()方法。在調(diào)用Context.stopService()或者stopSelf()之前,Service一直處于運(yùn)行的狀態(tài)。如果多次調(diào)用startService()方法,系統(tǒng)只會(huì)多次調(diào)用onStart()方法,而不會(huì)重復(fù)調(diào)用onCreate()方法。無論調(diào)用了多少次startService(),只需要調(diào)用一次stopService()就可以停止Service。Service對象在銷毀之前,onDestroy()會(huì)被調(diào)用,因此與資源釋放相關(guān)的工作應(yīng)該在此方法中完成。
 
BroadcastReceiver

應(yīng)用程序的運(yùn)行環(huán)境不是一成不變的,SD卡插拔、電池電量低等事件會(huì)影響應(yīng)用程序的運(yùn)行。為了能夠做出正確的響應(yīng),應(yīng)用程序必須能夠監(jiān)聽此類事件并做出正確的處理。在OPhone系統(tǒng)中,BroadcastReceiver就是我們需要的那個(gè)組件。BroadcastReceiver沒有界面顯示,但是它卻可以通過AndroidManifest.xml或者在代碼中進(jìn)行注冊,以監(jiān)聽?wèi)?yīng)用程序感興趣的事件。BroadcastReceiver是一個(gè)抽象類,定義了一個(gè)抽象方法onReceive(),當(dāng)廣播事件到來時(shí),BroadcastReceiver的onReceive()方法會(huì)被調(diào)用,開發(fā)者只需要自己實(shí)現(xiàn)此方法即可。
void onReceive(Context curContext, Intent broadcastMsg)

使用BroadcastReceiver可以方便的實(shí)現(xiàn)開機(jī)自啟動(dòng)應(yīng)用程序,OPhone系統(tǒng)啟動(dòng)后,會(huì)廣播Intent.ACTION_BOOT_COMPLETED事件,因此只需要在程序中定義一個(gè)BroadcastReceiver并在AndroidManifest.xml中進(jìn)行注冊。

  1. <receiver android:name=".BootReceiver" >   
  2. <intent-filter> <action android:name="android.intent.action.BOOT_  
  3. COMPLETED" /> intent-filter> receiver>  

除此之外,還需要在AndroidManifest.xml中增加權(quán)限聲明,如果不聲明應(yīng)用程序所需要的權(quán)限,那么在運(yùn)行時(shí)會(huì)拋出安全異常。

  1. <uses-permission android:name="android.permission.RECEIVE_BOOT_  
  2. COMPLETED"/>    
  3. <uses-permission android:name="android.permission.RECEIVE_BOOT_  
  4. COMPLETED"/> 

最后只需要實(shí)現(xiàn)一個(gè)BroadcastReceiver即可,代碼如下所示:

  1. public class BootReceiver extends BroadcastReceiver  
  2. { @Override public void onReceive(Context arg0, Intent arg1)   
  3. { if (arg1.getAction().equals(Intent.ACTION_BOOT_COMPLETED))   
  4. {Intent intent = new Intent(arg0, com.ophone.MusicActivity.class); //在Activity之外調(diào)用startActivity()   
  5. intent.addFlag  
  6. (Intent.FLAG_ACTIVITY_NEW_TASK);   
  7. arg0.startActivity(intent); } } }    
責(zé)任編輯:chenqingxiang 來源: ophonesdn
相關(guān)推薦

2010-04-11 17:18:14

Windows Pho

2010-07-23 14:51:09

OPhone開發(fā)

2017-10-13 13:13:14

人工智能深度學(xué)習(xí)微博

2022-01-07 16:24:30

Kubernetes容器平臺(tái)

2019-12-12 10:22:16

大數(shù)據(jù)平臺(tái)大數(shù)據(jù)安全大數(shù)據(jù)

2023-12-04 11:13:46

AIoT智能物聯(lián)網(wǎng)

2010-07-23 16:08:38

OPhone平臺(tái)

2015-08-31 14:57:11

大數(shù)據(jù)處理

2020-02-24 21:23:41

跨平臺(tái)想法嘗試

2009-03-26 08:26:22

AndroidGoogle移動(dòng)OS

2020-12-17 19:15:48

大數(shù)據(jù)大數(shù)據(jù)平臺(tái)架構(gòu)數(shù)據(jù)平臺(tái)建設(shè)

2021-02-22 10:55:59

大數(shù)據(jù)大數(shù)據(jù)平臺(tái)數(shù)據(jù)平臺(tái)建設(shè)

2019-11-21 09:49:29

架構(gòu)運(yùn)維技術(shù)

2021-02-22 10:32:53

大數(shù)據(jù)大數(shù)據(jù)平臺(tái)大數(shù)據(jù)技術(shù)棧

2009-04-10 08:42:38

OMS移動(dòng)OSophone

2011-04-13 13:28:46

JavaScript程序員

2019-12-24 08:11:39

大數(shù)據(jù)架構(gòu)數(shù)據(jù)開發(fā)

2020-04-14 08:24:29

滴滴ElasticSear架構(gòu)

2010-07-26 12:57:12

OPhone游戲開發(fā)

2017-06-22 11:03:58

大數(shù)據(jù)大數(shù)據(jù)平臺(tái)架構(gòu)技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號