Android入門開發(fā)實(shí)例_第1頁
Android入門開發(fā)實(shí)例_第2頁
Android入門開發(fā)實(shí)例_第3頁
Android入門開發(fā)實(shí)例_第4頁
Android入門開發(fā)實(shí)例_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1

Android開發(fā)2024年3月11日上海理想信息產(chǎn)業(yè)〔集團(tuán)〕Android開發(fā)準(zhǔn)備工作Android開發(fā)所需的軟件及下載地址JDK1.6EclipseAndroidSDKADTAndroid開發(fā)準(zhǔn)備工作AndroidSDK安裝1.下載AndroidSDK壓縮包(如android-sdk_r20.0.3-windows.zip),解壓縮后在文件夾中運(yùn)行SDKManager.exe2.選擇android版本,點(diǎn)擊Installpackages下載SDKAndroid開發(fā)準(zhǔn)備工作ADT安裝以及配置1.安裝ADT方法1:啟動(dòng)Eclipse,點(diǎn)擊“Help”,選擇“InstallNewSorftware...”,點(diǎn)擊“Add”按鈕,輸入地址://dl-ssl.google/android/eclipse/以及名稱,點(diǎn)擊“OK”按鈕,然后按照提示完成后續(xù)操作。方法2:下載ADT壓縮包,按照方法1點(diǎn)擊“Add”按鈕后,選擇點(diǎn)擊“Archive...”按鈕,選擇下載好的壓縮包,點(diǎn)擊“OK”按鈕,然后按照提示完成后續(xù)操作2.配置ADT安裝ADT之后,重啟Eclipse,翻開菜單“Window”,依次選擇“Preferences”→“Android”,點(diǎn)擊“Browse...”選擇AndroidSDK路徑Android應(yīng)用程序構(gòu)架src/java原代碼存放目錄gen/自動(dòng)生成目錄gen目錄中存放所有由Android開發(fā)工具自動(dòng)生成的文件。目錄中最重要的就是R.java文件。這個(gè)文件由Android開發(fā)工具自動(dòng)產(chǎn)生的。Android開發(fā)工具會(huì)自動(dòng)根據(jù)你放入res目錄的xml界面文件、圖標(biāo)與常量,同步更新修改R.java文件。正因?yàn)镽.java文件是由開發(fā)工具自動(dòng)生成的,所以我們應(yīng)防止手工修改R.java。R.java在應(yīng)用中起到了字典的作用,它包含了界面、圖標(biāo)、常量等各種資源的id,通過R.java,應(yīng)用可以很方便地找到對應(yīng)資源。另外編繹器也會(huì)檢查R.java列表中的資源是否被使用到,沒有被使用到的資源不會(huì)編繹進(jìn)軟件中,這樣可以減少應(yīng)用在占用的空間。res/資源(Resource)目錄在這個(gè)目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請看ppt下方備注欄。AndroidManifest.xml功能清單文件這個(gè)文件列出了應(yīng)用程序所提供的功能,在這個(gè)文件中,你可以指定應(yīng)用程序使用到的效勞(如效勞、互聯(lián)網(wǎng)效勞、短信效勞、GPS效勞等等)。另外當(dāng)你新添加一個(gè)Activity的時(shí)候,也需要在這個(gè)文件中進(jìn)行相應(yīng)配置,只有配置好后,才能調(diào)用此Activity。perties工程環(huán)境信息,一般是不需要修改此文件Activity生命周期Activity有三個(gè)狀態(tài):當(dāng)它在屏幕前臺(tái)時(shí)〔位于當(dāng)前任務(wù)堆棧的頂部〕,它是激活或運(yùn)行狀態(tài)。它就是響應(yīng)用戶操作的Activity。當(dāng)它失去焦點(diǎn)但仍然對用戶可見時(shí),它處于暫停狀態(tài)。即在它之上有另外一個(gè)Activity。這個(gè)Activity也許是透明的,或者沒有完全覆蓋全屏,所以被暫停的Activity仍對用戶可見。暫停的Activity仍然是存活狀態(tài)〔它保存著所有的狀態(tài)和成員信息并保持和窗口管理器的連接〕,但系統(tǒng)處于極低內(nèi)存時(shí)仍然可以殺死這個(gè)Activity。完全被另一個(gè)Activity覆蓋時(shí)那么處于停止?fàn)顟B(tài)。它仍然保存所有的狀態(tài)和成員信息。然而對用戶是不可見的,所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,那么系統(tǒng)經(jīng)常會(huì)殺死這個(gè)Activity。當(dāng)Activity從一種狀態(tài)轉(zhuǎn)變到另一種狀態(tài)時(shí),會(huì)調(diào)用以下保護(hù)方法來通知這種變化:voidonCreate(BundlesavedInstanceState)voidonStart()voidonRestart()voidonResume()voidonPause()voidonStop()voidonDestroy()Activity生命周期這七個(gè)方法定義了Activity的完整生命周期。實(shí)現(xiàn)這些方法可以幫助我們監(jiān)視其中的三個(gè)嵌套生命周期循環(huán):Activity的完整生命周期自第一次調(diào)用onCreate()開始,直至調(diào)用onDestroy()為止。Activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化,而在onDestroy()中釋放所有系統(tǒng)資源。例如,如果Activity有一個(gè)線程在后臺(tái)運(yùn)行從網(wǎng)絡(luò)上下載數(shù)據(jù),它會(huì)在onCreate()創(chuàng)立線程,而在onDestroy()銷毀線程。Activity的可視生命周期自onStart()調(diào)用開始直到相應(yīng)的onStop()調(diào)用結(jié)束。在此期間,用戶可以在屏幕上看到Activity,盡管它也許并不是位于前臺(tái)或者也不與用戶進(jìn)行交互。在這兩個(gè)方法之間,我們可以保存用來向用戶顯示這個(gè)Activity所需的資源。例如,當(dāng)用戶不再看見我們顯示的內(nèi)容時(shí),我們可以在onStart()中注冊一個(gè)BroadcastReceiver來監(jiān)控會(huì)影響UI的變化,而在onStop()中來注消。onStart()和onStop()方法可以隨著應(yīng)用程序是否為用戶可見而被屢次調(diào)用。Activity的前臺(tái)生命周期自onResume()調(diào)用起,至相應(yīng)的onPause()調(diào)用為止。在此期間,Activity位于前臺(tái)最上面并與用戶進(jìn)行交互。Activity會(huì)經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換——例如當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或者有新的Activity啟動(dòng)時(shí),將調(diào)用onPause()方法。當(dāng)Activity獲得結(jié)果或者接收到新的Intent時(shí)會(huì)調(diào)用onResume()方法。關(guān)于前臺(tái)生命周期循環(huán)的例子請見PPT下方備注欄。Activity生命周期添加新的Activity第一步:新建一個(gè)繼承Activity的類,如:NewActivitypublicclassNewActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState); //這里可以使用setContentView(R.layout.xxx)顯示某個(gè)視圖....}}第二步:需要在功能清單AndroidManifest.xml文件中添加進(jìn)上面Activity配置代碼(紅色局部):<manifestxmlns:android="://schemas.android/apk/res/android"package="c"android:versionCode="1"android:versionName="1.0"><applicationandroid:icon="@drawable/icon"android:label="@string/app_name">..... <activityandroid:name=".NewActivity"android:label="新activity的頁面標(biāo)題"/></application>...</manifest>android:name屬性值的前面加了一個(gè)點(diǎn)表示NewActivity是當(dāng)前包下的類,如果類在應(yīng)用的當(dāng)前包下,可以省略點(diǎn)符號,如果類在應(yīng)用的子包下必須加點(diǎn),如:NewActivity類在包下可以這樣寫:<activityandroid:name=“.user.NewActivity“/>翻開新的Activity在一個(gè)Activity中可以使用系統(tǒng)提供的startActivity(Intentintent)方法翻開新的Activity,在翻開新的Activity前,你可以決定是否為新的Activity傳遞參數(shù):第一種:翻開新的Activity,不傳遞參數(shù)publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){ ....... Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){//點(diǎn)擊該按鈕會(huì)翻開一個(gè)新的Activity publicvoidonClick(Viewv){//新建一個(gè)intent,第一個(gè)參數(shù)為當(dāng)前Activity類對象,第二個(gè)參數(shù)為你要翻開的Activity類 startActivity(newIntent(MainActivity.this,NewActivity.class)); }});}}翻開新的Activity第二種:翻開新的Activity,并傳遞假設(shè)干個(gè)參數(shù)給它:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){ ....... button.setOnClickListener(newView.OnClickListener(){//點(diǎn)擊該按鈕會(huì)翻開一個(gè)新的Activity publicvoidonClick(Viewv){ Intentintent=newIntent(MainActivity.this,NewActivity.class)Bundlebundle=newBundle();//該類用作攜帶數(shù)據(jù)bundle.putString("name","參數(shù)");intent.putExtras(bundle);//附帶上額外的數(shù)據(jù)startActivity(intent); }});}}在新的Activity中接收前面Activity傳遞過來的參數(shù):publicclassNewActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){ ........ Bundlebundle=this.getIntent().getExtras(); Stringname=bundle.getString("name");}}得到新翻開的Activity關(guān)閉后返回的數(shù)據(jù)使用系統(tǒng)提供的startActivityForResult(Intentintent,intrequestCode)方法翻開新的Activity,新的Activity關(guān)閉后會(huì)向前面的Activity傳回?cái)?shù)據(jù),為了得到傳回的數(shù)據(jù),你必須在前面的Activity中重寫onActivityResult(intrequestCode,intresultCode,Intentdata)方法:publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){ ....... Buttonbutton=(Button)this.findViewById(R.id.button);button.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ //第二個(gè)參數(shù)為請求碼,可以根據(jù)業(yè)務(wù)需求自己編號 startActivityForResult(newIntent(MainActivity.this,NewActivity.class),1); }});}//第一個(gè)參數(shù)為請求碼,即調(diào)用startActivityForResult()傳遞過去的值//第二個(gè)參數(shù)為結(jié)果碼,結(jié)果碼用于標(biāo)識返回?cái)?shù)據(jù)來自哪個(gè)新Activity@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ //得到新Activity關(guān)閉后返回的數(shù)據(jù) Stringresult=data.getExtras().getString(“result”));}}當(dāng)新Activity關(guān)閉后,新Activity返回的數(shù)據(jù)通過Intent進(jìn)行傳遞,android平臺(tái)會(huì)調(diào)用前面Activity的onActivityResult()方法,把存放了返回?cái)?shù)據(jù)的Intent作為第三個(gè)輸入?yún)?shù)傳入,在onActivityResult()方法中使用第三個(gè)輸入?yún)?shù)可以取出新Activity返回的數(shù)據(jù)。得到新翻開的Activity關(guān)閉后返回的數(shù)據(jù)使用startActivityForResult(Intentintent,intrequestCode)方法翻開新的Activity,新Activity關(guān)閉前需要向前面的Activity返回?cái)?shù)據(jù)需要使用系統(tǒng)提供的setResult(intresultCode,Intentdata)方法實(shí)現(xiàn):publicclassNewActivityextendsActivity{ @OverrideprotectedvoidonCreate(BundlesavedInstanceState){ ...... button.setOnClickListener(newView.OnClickListener(){ publicvoidonClick(Viewv){ Intentintent=newIntent();//數(shù)據(jù)是使用Intent返回 intent.putExtra(“result”,“返回結(jié)果”);//把返回?cái)?shù)據(jù)存入Intent NewActivity.this.setResult(RESULT_OK,intent);//設(shè)置返回?cái)?shù)據(jù) NewActivity.this.finish();//關(guān)閉Activity }}); }}setResult()方法的第一個(gè)參數(shù)值可以根據(jù)業(yè)務(wù)需要自己定義,上面代碼中使用到的RESULT_OK是系統(tǒng)Activity類定義的一個(gè)常量,值為-1,代碼片斷如下:publicclassandroid.app.Activityextends......{publicstaticfinalintRESULT_CANCELED=0;publicstaticfinalintRESULT_OK=-1;publicstaticfinalintRESULT_FIRST_USER=1;}IntentAndroid根本的設(shè)計(jì)理念是鼓勵(lì)減少組件間的耦合,因此Android提供了Intent(意圖),Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序與其它的應(yīng)用程序間傳遞Intent來執(zhí)行動(dòng)作和產(chǎn)生事件。使用Intent可以激活A(yù)ndroid應(yīng)用的三個(gè)核心組件:活動(dòng)、效勞和播送接收器。撥打: Intentintent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+tel)); startActivity(intent);發(fā)送短信: PendingIntentpi=PendingIntent.getBroadcast(context,0,newIntent(),0); SmsManagersmsManager=SmsManager.getDefault(); smsManager.sendTextMessage(tel,null,text,pi,null);數(shù)據(jù)存儲(chǔ)-SharedPreferencesAndroid提供了多種保存數(shù)據(jù)的方法,比方SharedPreferences類,它是一個(gè)輕量級的存儲(chǔ)類,特別適合用于保存軟件配置參數(shù)。使用SharedPreferences保存數(shù)據(jù),其背后是用xml文件存放數(shù)據(jù),文件存放在/data/data/<packagename>/shared_prefs目錄下:SharedPreferencessharedPreferences=getSharedPreferences("data",Context.MODE_PRIVATE);Editoreditor=sharedPreferences.edit();//獲取編輯器editor.putString("name","參數(shù)");editormit();//提交修改getSharedPreferences(name,mode)方法的第一個(gè)參數(shù)用于指定該文件的名稱,方法的第二個(gè)參數(shù)指定文件的操作模式,共有四種操作模式。如果希望SharedPreferences背后使用的xml文件能被其他應(yīng)用讀和寫,可以指定Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE權(quán)限。另外Activity還提供了另一個(gè)getPreferences(mode)方法操作SharedPreferences,這個(gè)方法默認(rèn)使用當(dāng)前類不帶包名的類名作為文件的名稱。數(shù)據(jù)存儲(chǔ)-FilesActivity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中。publicclassFileActivityextendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){...FileOutputStreamoutStream=this.openFileOutput("data.txt",Context.MODE_PRIVATE);outStream.write("數(shù)據(jù)".getBytes());outStream.close();}}openFileOutput()方法的第一參數(shù)用于指定文件名稱,不能包含路徑分隔符“/”,如果文件不存在,Android會(huì)自動(dòng)創(chuàng)立它。創(chuàng)立的文件保存在/data/data/<packagename>/files目錄,如:/data/data/cn./files/data.txt翻開存放在/data/data/<packagename>/files目錄應(yīng)用私有的文件,可以使用Activity提供openFileInput()方法。FileInputStreaminStream=this.getContext().openFileInput("data.txt");Log.i("FileTest",readInStream(inStream));//readInStream()的方法請看本頁下面?zhèn)渥?。Activity還提供了getCacheDir()和getFilesDir()方法:getCacheDir()方法用于獲取/data/data/<packagename>/cache目錄getFilesDir()方法用于獲取/data/data/<packagename>/files目錄數(shù)據(jù)存儲(chǔ)-Files把文件存入SD卡要往SDCard存放文件,程序必須先判斷是否裝有SDCard,并且可以進(jìn)行讀寫。注意:訪問SDCard必須在AndroidManifest.xml中參加訪問SDCard的權(quán)限if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){FilesdCardDir=Environment.getExternalStorageDirectory();//獲取SDCard目錄FilesaveFile=newFile(sdCardDir,“data.txt”);FileOutputStreamoutStream=newFileOutputStream(saveFile);outStream.write("數(shù)據(jù)".getBytes());outStream.close();}Environment.getExternalStorageState()方法用于獲取SDCard的狀態(tài),如果裝有SDCard,并且可以進(jìn)行讀寫,那么方法返回的狀態(tài)等于Environment.MEDIA_MOUNTED。數(shù)據(jù)存儲(chǔ)-SQLiteAndroid集成了一個(gè)嵌入式關(guān)系型數(shù)據(jù)庫—SQLite,可以用來解決需要存儲(chǔ)、管理以及升級維護(hù)大量數(shù)據(jù)的情況。1.創(chuàng)立和翻開數(shù)據(jù)庫SQLiteDatabasemSQLiteDatabase=this.openOrCreateDatabase(“data.db”,MODE_PRIVATE,null);該語句會(huì)翻開一個(gè)名為data.db的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在那么創(chuàng)立一個(gè)。2.創(chuàng)立表Stringcreate_table="CREATETABLEtable1(_idINTEGERPRIMARYKEY,numINTERGER,dataTEXT)";mSQLiteDatabase.execSQL(create_table);3.向表里添加一條數(shù)據(jù)ContentValuescv=newContentValues();cv.put("num",1);cv.put("data","測試數(shù)據(jù)庫數(shù)據(jù)");/*插入數(shù)據(jù)*/mSQLiteDatabase.insert(“table1”,null,cv);也可以先寫一條insert語句,再使用execSQL()方法執(zhí)行。Stringinsert="INSERTINTOtabl1(_id,num,data)values(1,1,"測試數(shù)據(jù)庫數(shù)據(jù)")";mSQLiteDatabase.execSQL(insert);數(shù)據(jù)存儲(chǔ)-SQLite4.刪除一條數(shù)據(jù)mSQLiteDatabase.execSQL("DELETEFROMtable1WHERE_id=0");5.修改一條數(shù)據(jù)ContentValuescv=newContentValues();cv.put(TABLE_NUM,1);cv.put(TABLE_DATA,"修改后的數(shù)據(jù)");/*更新數(shù)據(jù)*/mSQLiteDatabase.update(TABLE_NAME,cv,"num=1",null);6.刪除表mSQLiteDatabase.execSQL("DROPTABLEtable1");7.關(guān)閉數(shù)據(jù)庫mSQLiteDatabase.close();8.刪除數(shù)據(jù)庫this.deleteDatabase(“data.db”);數(shù)據(jù)存儲(chǔ)-SQLite9.查詢數(shù)據(jù)Cursorcursor=mSQLiteDatabase.rawQuery(“select*fromtable1”,null);if(cursor!=null){if(cursor.moveToFirst()){do{

intnumColumn=cursor.getColumnIndex("num");

intnum=cursor.getInt(numColumn);

}while(cursor.moveToNext());}}播送接收-BroadcastReceiver播送接收者〔BroadcastReceiver〕用于異步接收播送Intent,播送Intent的發(fā)送是通過調(diào)用Context.sendBroadcast()、Context.sendOrderedBroadcast()或者Context.sendStickyBroadcast()來實(shí)現(xiàn)的。通常一個(gè)播送Intent可以被訂閱了此Intent的多個(gè)播送接收者所接收。要實(shí)現(xiàn)一個(gè)播送接收者方法如下:第一步:繼承BroadcastReceiver,并重寫onReceive()方法。publicclassIncomingSMSReceiverextendsBroadcastReceiver{ @OverridepublicvoidonReceive(Contextcontext,Intentintent){ }}第二步:訂閱感興趣的播送Intent,訂閱方法有兩種:第一種:使用代碼進(jìn)行訂閱IntentFilterfilter=newIntentFilter("vider.Telephony.SMS_RECEIVED");IncomingSMSReceiverreceiver=newIncomingSMSReceiver();registerReceiver(receiver,filter);第二種:在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里進(jìn)行訂閱:<receiverandroid:name=".IncomingSMSReceiver"><intent-filter><actionandroid:name="vider.Telephony.SMS_RECEIVED"/></intent-filter></receiver>播送接收-監(jiān)聽短信當(dāng)系統(tǒng)收到短信時(shí),會(huì)發(fā)出一個(gè)action名稱為的播送Intent,該Intent存放了接收到的短信內(nèi)容,使用名稱“pdus”即可從Intent中獲取短信內(nèi)容。publicclassIncomingSMSReceiverextendsBroadcastReceiver{privatestaticfinalStringSMS_RECEIVED="vider.Telephony.SMS_RECEIVED";@OverridepublicvoidonReceive(Contextcontext,Intentintent){if(intent.getAction().equals(SMS_RECEIVED)){ SmsManagersms=SmsManager.getDefault(); Bundlebundle=intent.getExtras(); if(bundle!=null){ Object[]pdus=(Object[])bundle.get("pdus"); SmsMessage[]messages=newSmsMessage[pdus.length]; for(inti=0;i<pdus.length;i++)messages[i]=SmsMessage.createFromPdu((byte[])pdus[i]); for(SmsMessagemessage:messages){ Stringmsg=message.getMessageBody(); Stringto=message.getOriginatingAddress(); sms.sendTextMessage(to,null,msg,null,null);}}}}}在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里對接收到短信的播送Intent進(jìn)行訂閱:<receiverandroid:name=".IncomingSMSReceiver"><intent-filter><actionandroid:name="vider.Telephony.SMS_RECEIVED"/></intent-filter></receiver>在AndroidManifest.xml文件中添加以下權(quán)限:<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/><!--接收短信權(quán)限--><uses-permissionandroid:name="android.permission.SEND_SMS"/><!--發(fā)送短信權(quán)限-->播送接收-電池變化、開機(jī)啟動(dòng)除了短信到來播送Intent,Android還有很多播送Intent,如:開機(jī)啟動(dòng)、電池電量變化、時(shí)間已經(jīng)改變等播送Intent。接收電池電量變化播送Intent,在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里訂閱此Intent:<receiverandroid:name=".IncomingSMSReceiver"><intent-filter><actionandroid:name="ent.action.BATTERY_CHANGED"/></intent-filter></receiver>接收開機(jī)啟動(dòng)播送Intent,在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里訂閱此Intent:<receiverandroid:name=".IncomingSMSReceiver"><intent-filter><actionandroid:name="ent.action.BOOT_COMPLETED"/></intent-filter></receiver>并且要進(jìn)行權(quán)限聲明:<uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>播送接收通常一個(gè)BroadcastReceiver對象的生命周期不超過5秒,所以在BroadcastReceiver里不能做一些比較耗時(shí)的操作,如果需要完成一項(xiàng)比較耗時(shí)的工作,可以通過發(fā)送Intent給Activity或Service,由Activity或Service來完成。publicclassIncomingSMSReceiverextendsBroadcastReceiver{ @OverridepublicvoidonReceive(Contextcontext,Intentintent){//發(fā)送Intent啟動(dòng)效勞,由效勞來完成比較耗時(shí)的操作Intentservice=newIntent(context,XxxService.class);context.startService(service);//發(fā)送Intent啟動(dòng)Activity,由Activity來完成比較耗時(shí)的操作IntentnewIntent=newIntent(context,XxxActivity.class);context.startActivity(newIntent); }}效勞-ServiceAndroid中的效勞和windows中的效勞是類似的東西,效勞一般沒有用戶操作界面,它運(yùn)行于系統(tǒng)中不容易被用戶覺察,可以使用它開發(fā)如監(jiān)控之類的程序。效勞的開發(fā)比較簡單,如下:第一步:繼承Service類publicclassSMSServiceextendsService{}第二步:在AndroidManifest.xml文件中的<application>節(jié)點(diǎn)里對效勞進(jìn)行配置:<serviceandroid:name=".SMSService"/>效勞不能自己運(yùn)行,需要通過調(diào)用Context.startService()或Context.bindService()方法啟動(dòng)效勞。這兩個(gè)方法都可以啟動(dòng)Service,但是它們的使用場合有所不同。使用startService()方法啟用效勞,調(diào)用者與效勞之間沒有關(guān)連,即使調(diào)用者退出了,效勞仍然運(yùn)行。使用bindService()方法啟用效勞,調(diào)用者與效勞綁定在了一起,調(diào)用者一旦退出,效勞也就終止。如果打算采用Context.startService()方法啟動(dòng)效勞,在效勞未被創(chuàng)立時(shí),系統(tǒng)會(huì)先調(diào)用效勞的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startService()方法前效勞已經(jīng)被創(chuàng)立,屢次調(diào)用startService()方法并不會(huì)導(dǎo)致屢次創(chuàng)立效勞,但會(huì)導(dǎo)致屢次調(diào)用onStart()方法。采用startService()方法啟動(dòng)的效勞,只能調(diào)用Context.stopService()方法結(jié)束效勞,效勞結(jié)束時(shí)會(huì)調(diào)用onDestroy()方法。如果打算采用Context.bindService()方法啟動(dòng)效勞,在效勞未被創(chuàng)立時(shí),系統(tǒng)會(huì)先調(diào)用效勞的onCreate()方法,接著調(diào)用onBind()方法。這個(gè)時(shí)候調(diào)用者和效勞綁定在一起,調(diào)用者退出了,系統(tǒng)就會(huì)先調(diào)用效勞的onUnbind()方法,接著調(diào)用onDestroy()方法。如果調(diào)用bindService()方法前效勞已經(jīng)被綁定,屢次調(diào)用bindService()方法并不會(huì)導(dǎo)致屢次創(chuàng)立效勞及綁定(也就是說onCreate()和onBind()方法并不會(huì)被屢次調(diào)用)。如果調(diào)用者希望與正在綁定的效勞解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會(huì)導(dǎo)致系統(tǒng)調(diào)用效勞的onUnbind()-->onDestroy()方法。效勞-Service效勞常用生命周期回調(diào)方法如下:onCreate()該方法在效勞被創(chuàng)立時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無論調(diào)用多少次startService()或bindService()方法,效勞也只被創(chuàng)立一次。onDestroy()該方法在效勞被終止時(shí)調(diào)用。與采用Context.startService()方法啟動(dòng)效勞有關(guān)的生命周期方法onStart()只有采用Context.startService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在效勞開始運(yùn)行時(shí)被調(diào)用。屢次調(diào)用startService()方法盡管不會(huì)屢次創(chuàng)立效勞,但onStart()方法會(huì)被屢次調(diào)用。與采用Context.bindService()方法啟動(dòng)效勞有關(guān)的生命周期方法onBind()只有采用Context.bindService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與效勞綁定時(shí)被調(diào)用,當(dāng)調(diào)用者與效勞已經(jīng)綁定,屢次調(diào)用Context.bindService()方法并不會(huì)導(dǎo)致該方法被屢次調(diào)用。onUnbind()只有采用Context.bindService()方法啟動(dòng)效勞時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與效勞解除綁定時(shí)被調(diào)用。效勞-Service采用Context.startService()方法啟動(dòng)效勞的代碼如下:publicclassHelloActivityextendsActivity{@Overridepublicvoid

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論