版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android的四大組件是哪些,它們的作用?答:Activity:Activity是Android程序與用戶交互的窗口,是Android構(gòu)造塊中最基本的一種,它需要為保持各界面的狀態(tài),做很多持久化的事情,妥善管理生命周期以及一些跳轉(zhuǎn)邏輯service:后臺(tái)服務(wù)于Activity,封裝有一個(gè)完整的功能邏輯實(shí)現(xiàn),接受上層指令,完畢相關(guān)的事物,定義好需要接受的Intent提供同步和異步的接口ContentProvider:是Android提供的第三方應(yīng)用數(shù)據(jù)的訪問方案,可以派生ContentProvider類,對(duì)外提供數(shù)據(jù),可以像數(shù)據(jù)庫同樣進(jìn)行選擇排序,屏蔽內(nèi)部數(shù)據(jù)的存儲(chǔ)細(xì)節(jié),向外提供統(tǒng)一的接口模型,大大簡(jiǎn)化上層應(yīng)用,對(duì)數(shù)據(jù)的整合提供了更方便的途徑BroadCastReceiver:接受一種或者多種Intent作觸發(fā)事件,接受相關(guān)消息,做一些簡(jiǎn)樸解決,轉(zhuǎn)換成一條Notificat(yī)ion,統(tǒng)一了Android的事件廣播模型請(qǐng)介紹下Android中常用的五種布局。常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout(線性布局),AbsoluteLayout(絕對(duì)布局),RelativeLayout(相對(duì)布局),TableLayout(表格布局)。一、FrameLayout:所有東西依次都放在左上角,會(huì)重疊,這個(gè)布局比較簡(jiǎn)樸,也只能放一點(diǎn)比較簡(jiǎn)樸的東西。二、LinearLayout:線性布局,每一個(gè)LinearLayout里面又可分為垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal")。當(dāng)垂直布局時(shí),每一行就只有一個(gè)元素,多個(gè)元素依次垂直往下;水平布局時(shí),只有一行,每一個(gè)元素依次向右排列。三、AbsoluteLayout:絕對(duì)布局用X,Y坐標(biāo)來指定元素的位置,這種布局方式也比較簡(jiǎn)樸,但是在屏幕旋轉(zhuǎn)時(shí),往往會(huì)出問題,并且多個(gè)元素的時(shí)候,計(jì)算比較麻煩。四、Relat(yī)iveLayout:相對(duì)布局可以理解為某一個(gè)元素為參照物,來定位的布局方式。重要屬性有:相對(duì)于某一個(gè)元素android:layout_below、android:layout_toLeftOf相對(duì)于父元素的地方android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一個(gè)TableLayout里面有表格行TableRow,TableRow里面可以具體定義每一個(gè)元素。每一個(gè)布局都有自己適合的方式,這五個(gè)布局元素可以互相嵌套應(yīng)用,做出美觀的界面。android中的動(dòng)畫有哪幾類,它們的特點(diǎn)和區(qū)別是什么答:兩種,一種是Tween動(dòng)畫、尚有一種是Frame動(dòng)畫。Twee(cuò)n動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng)、放大、縮小以及產(chǎn)生透明度的變化;另一種Frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。android中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別。答:XML解析重要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對(duì)輕松些,但一些性能敏感的數(shù)據(jù)庫或手機(jī)上還是重要采用SAX方式,SAX讀取是單向的,優(yōu)點(diǎn):不占內(nèi)存空間、解析屬性方便,但缺陷就是對(duì)于套嵌多個(gè)分支來說解決不是很方便。而DOM方式會(huì)把整個(gè)XML文獻(xiàn)加載到內(nèi)存中去,該方法在查找方面可以和XPath很好的結(jié)合假如數(shù)據(jù)量不是很大推薦使用,而PULL經(jīng)常用在J2ME對(duì)于節(jié)點(diǎn)解決比較好,類似SAX方式,同樣很節(jié)省內(nèi)存,在J2ME中我們經(jīng)常使用的KXML庫來解析。ListView的優(yōu)化方案答:1、假如自定義適配器,那么在getView方法中要考慮方法傳進(jìn)來的參數(shù)contentView是否為null,假如為null就創(chuàng)建contentView并返回,假如不為null則直接使用。在這個(gè)方法中盡也許少創(chuàng)建view。2、給contentView設(shè)立tag(setTag()),傳入一個(gè)viewHolder對(duì)象,用于緩存要顯示的數(shù)據(jù),可以達(dá)成圖像數(shù)據(jù)異步加載的效果。3、假如listview需要顯示的item很多,就要考慮分頁加載。比如一共要顯示100條或者更多的時(shí)候,我們可以考慮先加載20條,等用戶拉到列表底部的時(shí)候再去加載接下來的20條。請(qǐng)介紹下Android的數(shù)據(jù)存儲(chǔ)方式。答:使用SharedPreferences存儲(chǔ)數(shù)據(jù);文獻(xiàn)存儲(chǔ)數(shù)據(jù);SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù);使用ContentProvider存儲(chǔ)數(shù)據(jù);網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);Preference,File,DataBase這三種方式分別相應(yīng)的目錄是/data/data/PackageName/Shared_Pref,/data/data/PackageName/files,/data/data/PackageName/database。一:使用SharedPreferences存儲(chǔ)數(shù)據(jù)一方面說明SharedPreferences存儲(chǔ)方式,它是Android提供的用來存儲(chǔ)一些簡(jiǎn)樸配置信息的一種機(jī)制,例如:登錄用戶的用戶名與密碼。其采用了Map數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù),以鍵值的方式存儲(chǔ),可以簡(jiǎn)樸的讀取與寫入,具體實(shí)例如下:voidReadSharedPreferences(){StringstrName,strPassword;SharedPreferencesuser=getSharedPreferences(“user_info”,0);strName=user.getString(“NAME”,””);strPassword=usergetString(“PASSWORD”,””);}voidWriteSharedPreferences(StringstrName,StringstrPassword){SharedPreferencesuser=getSharedPreferences(“user_info”,0);uer.edit();user.putString(“NAME”,strName);user.putString(“PASSWORD”,strPassword);user.commit();}數(shù)據(jù)讀取與寫入的方法都非常簡(jiǎn)樸,只是在寫入的時(shí)候有些區(qū)別:先調(diào)用edit()使其處在編輯狀態(tài),然后才干修改數(shù)據(jù),最后使用commit()提交修改的數(shù)據(jù)。事實(shí)上SharedPreferences是采用了XML格式將數(shù)據(jù)存儲(chǔ)到設(shè)備中,在DDMS中的FileExplorer中的/data/dat(yī)a/<packagename>/shares_prefs下。使用SharedPreferences是有些限制的:只能在同一個(gè)包內(nèi)使用,不能在不同的包之間使用。二:文獻(xiàn)存儲(chǔ)數(shù)據(jù)文獻(xiàn)存儲(chǔ)方式是一種較常用的方法,在Android中讀取/寫入文獻(xiàn)的方法,與Java中實(shí)現(xiàn)I/O的程序是完全同樣的,提供了openFileInput()和openFileOutput()方法來讀取設(shè)備上的文獻(xiàn)。具體實(shí)例如下:Stringfn=“moandroid.log”;FileInputStreamfis=openFileInput(fn);FileOutputStreamfos=openFileOutput(fn,Context.MODE_PRIVATE);三:網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù)網(wǎng)絡(luò)存儲(chǔ)方式,需要與Android網(wǎng)絡(luò)數(shù)據(jù)包打交道,關(guān)于Android網(wǎng)絡(luò)數(shù)據(jù)包的具體說明,請(qǐng)閱讀AndroidSDK引用了JavaSDK的哪些package?。四:ContentProvider1、ContentProvider簡(jiǎn)介當(dāng)應(yīng)用繼承ContentProvider類,并重寫該類用于提供數(shù)據(jù)和存儲(chǔ)數(shù)據(jù)的方法,就可以向其他應(yīng)用共享其數(shù)據(jù)。雖然使用其他方法也可以對(duì)外共享數(shù)據(jù),但數(shù)據(jù)訪問方式會(huì)因數(shù)據(jù)存儲(chǔ)的方式而不同,如:采用文獻(xiàn)方式對(duì)外共享數(shù)據(jù),需要進(jìn)行文獻(xiàn)操作讀寫數(shù)據(jù);采用sharedpreferences共享數(shù)據(jù),需要使用sharedpreferencesAPI讀寫數(shù)據(jù)。而使用ContentProvider共享數(shù)據(jù)的好處是統(tǒng)一了數(shù)據(jù)訪問方式。2、Uri類簡(jiǎn)介Uri代表了要操作的數(shù)據(jù),Uri重要包含了兩部分信息:1.需要操作的ContentProvider,2.對(duì)ContentProvider中的什么數(shù)據(jù)進(jìn)行操作,一個(gè)Uri由以下幾部分組成:1.scheme:ContentProvider(內(nèi)容提供者)的scheme已經(jīng)由Android所規(guī)定為:content://…2.主機(jī)名(或Authority):用于唯一標(biāo)記這個(gè)ContentProvider,外部調(diào)用者可以根據(jù)這個(gè)標(biāo)記來找到它。3.途徑(path):可以用來表達(dá)我們要操作的數(shù)據(jù),途徑的構(gòu)建應(yīng)根據(jù)業(yè)務(wù)而定,如下:要操作contact表中id為10的記錄,可以構(gòu)建這樣的途徑:/contact/10要操作contact表中id為10的記錄的name字段,contact/10/name要操作contact表中的所有記錄,可以構(gòu)建這樣的途徑:/contact?要操作的數(shù)據(jù)不一定來自數(shù)據(jù)庫,也可以是文獻(xiàn)等他存儲(chǔ)方式,如下:要操作xml文獻(xiàn)中contact節(jié)點(diǎn)下的name節(jié)點(diǎn),可以構(gòu)建這樣的途徑:/contact/name假如要把一個(gè)字符串轉(zhuǎn)換成Uri,可以使用Uri類中的parse()方法,如下:Uriuri=Uri.parse("content://com.changcheng.provider.contactprovider/contact")3、UriMatcher、ContentUrist和ContentResolver簡(jiǎn)介由于Uri代表了要操作的數(shù)據(jù),所以我們很經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù)。Android系統(tǒng)提供了兩個(gè)用于操作Uri的工具類,分別為UriMat(yī)cher和ContentUris。掌握它們的使用,會(huì)便于我們的開發(fā)工作。UriMatcher:用于匹配Uri,它的用法如下:1.一方面把你需要匹配Uri途徑所有給注冊(cè)上,如下://常量UriMatcher.NO_MATCH表達(dá)不匹配任何途徑的返回碼(-1)。UriMatcheruriMatcher=newUriMat(yī)cher(UriMatcher.NO_MATCH);//假如match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact途徑,返回匹配碼為1uriMat(yī)cher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact”,1);//添加需要匹配uri,假如匹配就會(huì)返回匹配碼//假如match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact/230途徑,返回匹配碼為2uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”,“contact/#”,2);//#號(hào)為通配符2.注冊(cè)完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法對(duì)輸入的Uri進(jìn)行匹配,假如匹配就返回匹配碼,匹配碼是調(diào)用addURI()方法傳入的第三個(gè)參數(shù),假設(shè)匹配content://com.changcheng.sqlite.provider.contactprovider/contact途徑,返回的匹配碼為1。ContentUris:用于獲?。誶i途徑后面的ID部分,它有兩個(gè)比較實(shí)用的方法:withAppendedId(uri,id)用于為途徑加上ID部分parseId(uri)方法用于從途徑中獲取ID部分ContentResolver:當(dāng)外部應(yīng)用需要對(duì)ContentProvider中的數(shù)據(jù)進(jìn)行添加、刪除、修改和查詢操作時(shí),可以使用ContentResolver類來完畢,要獲取ContentResolver對(duì)象,可以使用Activity提供的getContentResolver()方法。ContentResolver使用insert、delete、update、query方法,來操作數(shù)據(jù)。activity的啟動(dòng)模式有哪些?是什么含義?答:在android里,有4種activity的啟動(dòng)模式,分別為:“standard”(默認(rèn))“singleTop”“singleTask”“singleInstance”它們重要有如下不同:1.如何決定所屬task“standard”和”singleTop”的activity的目的task,和收到的Intent的發(fā)送者在同一個(gè)task內(nèi),除非intent涉及參數(shù)FLAG_ACTIVITY_NEW_TASK。假如提供了FLAG_ACTIVITY_NEW_TASK參數(shù),會(huì)啟動(dòng)到別的task里?!皊ingleTask”和”singleInstance”總是把a(bǔ)ctivity作為一個(gè)task的根元素,他們不會(huì)被啟動(dòng)到一個(gè)其他task里。2.是否允許多個(gè)實(shí)例“standard”和”singleTop”可以被實(shí)例化多次,并且存在于不同的task中,且一個(gè)task可以涉及一個(gè)activity的多個(gè)實(shí)例;“singleTask”和”singleInstance”則限制只生成一個(gè)實(shí)例,并且是task的根元素。singleTop規(guī)定假如創(chuàng)建intent的時(shí)候棧頂已有要?jiǎng)?chuàng)建的Activity的實(shí)例,則將intent發(fā)送給該實(shí)例,而不發(fā)送給新的實(shí)例。3.是否允許其它activity存在于本task內(nèi)“singleInstance”獨(dú)占一個(gè)task,其它activity不能存在那個(gè)task里;假如它啟動(dòng)了一個(gè)新的activity,不管新的activity的launchmode如何,新的activity都將會(huì)到別的task里運(yùn)營(yíng)(如同加了FLAG_ACTIVITY_NEW_TASK參數(shù))。而此外三種模式,則可以和其它activity共存。4.是否每次都生成新實(shí)例“standard”對(duì)于沒一個(gè)啟動(dòng)Intent都會(huì)生成一個(gè)activity的新實(shí)例;“singleTop”的activity假如在task的棧頂?shù)脑?,則不生成新的該activity的實(shí)例,直接使用棧頂?shù)膶?shí)例,否則,生成該activity的實(shí)例。比如現(xiàn)在task棧元素為A-B-C-D(D在棧頂),這時(shí)候給D發(fā)一個(gè)啟動(dòng)intent,假如D是“standard”的,則生成D的一個(gè)新實(shí)例,棧變?yōu)锳-B-C-D-D。假如D是singleTop的話,則不會(huì)生產(chǎn)D的新實(shí)例,棧狀態(tài)仍為A-B-C-D假如這時(shí)候給B發(fā)Intent的話,不管B的launchmode是”standard”還是“singleTop”,都會(huì)生成B的新實(shí)例,棧狀態(tài)變?yōu)锳-B-C-D-B?!皊ingleInstance”是其所在棧的唯一activity,它會(huì)每次都被重用?!皊ingleTask”假如在棧頂,則接受intent,否則,該intent會(huì)被丟棄,但是該task仍會(huì)回到前臺(tái)。當(dāng)已經(jīng)存在的activity實(shí)例解決新的intent時(shí)候,會(huì)調(diào)用onNewIntent()方法假如收到intent生成一個(gè)activity實(shí)例,那么用戶可以通過back鍵回到上一個(gè)狀態(tài);假如是已經(jīng)存在的一個(gè)activity來解決這個(gè)intent的話,用戶不能通過按back鍵返回到這之前的狀態(tài)。跟activity和Task有關(guān)的Intent啟動(dòng)方式有哪些?其含義?核心的IntentFlag有:FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_RESET_TASK_IF_NEEDEDFLAG_ACTIVITY_SINGLE_TOPFLAG_ACTIVITY_NEW_TASK假如設(shè)立,這個(gè)Activity會(huì)成為歷史stack中一個(gè)新Task的開始。一個(gè)Task(從啟動(dòng)它的Activity到下一個(gè)Task中的Activity)定義了用戶可以遷移的Activity原子組。Task可以移動(dòng)到前臺(tái)和后臺(tái);在某個(gè)特定Task中的所有Activity總是保持相同的順序。這個(gè)標(biāo)志一般用于呈現(xiàn)“啟動(dòng)”類型的行為:它們提供用戶一系列可以單獨(dú)完畢的事情,與啟動(dòng)它們的Activity完全無關(guān)。使用這個(gè)標(biāo)志,假如正在啟動(dòng)的Activity的Task已經(jīng)在運(yùn)營(yíng)的話,那么,新的Activity將不會(huì)啟動(dòng);代替的,當(dāng)前Task會(huì)簡(jiǎn)樸的移入前臺(tái)。參考FLAG_ACTIVITY_MULTIPLE_TASK標(biāo)志,可以禁用這一行為。這個(gè)標(biāo)志不能用于調(diào)用方對(duì)已經(jīng)啟動(dòng)的Activity請(qǐng)求結(jié)果。FLAG_ACTIVITY_CLEAR_TOP?
假如設(shè)立,并且這個(gè)Activity已經(jīng)在當(dāng)前的Task中運(yùn)營(yíng),因此,不再是重新啟動(dòng)一個(gè)這個(gè)Activity的實(shí)例,而是在這個(gè)Activity上方的所有Activity都將關(guān)閉,然后這個(gè)Intent會(huì)作為一個(gè)新的Intent投遞到老的Activity(現(xiàn)在位于頂端)中。
例如,假設(shè)一個(gè)Task中包含這些Activity:A,B,C,D。假如D調(diào)用了startActivity(),并且包含一個(gè)指向ActivityB的Intent,那么,C和D都將結(jié)束,然后B接受到這個(gè)Intent,因此,目前stack的狀況是:A,B。
上例中正在運(yùn)營(yíng)的ActivityB既可以在onNewIntent()中接受到這個(gè)新的Intent,也可以把自己關(guān)閉然后重新啟動(dòng)來接受這個(gè)Intent。假如它的啟動(dòng)模式聲明為“multiple”(默認(rèn)值),并且你沒有在這個(gè)Intent中設(shè)立FLAG_ACTIVITY_SINGLE_TOP標(biāo)志,那么它將關(guān)閉然后重新創(chuàng)建;對(duì)于其它的啟動(dòng)模式,或者在這個(gè)Intent中設(shè)立FLAG_ACTIVITY_SINGLE_TO(shè)P標(biāo)志,都將把這個(gè)Intent投遞到當(dāng)前這個(gè)實(shí)例的onNewIntent()中。?
這個(gè)啟動(dòng)模式還可以與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用:用于啟動(dòng)一個(gè)Task中的根Activity,它會(huì)把那個(gè)Task中任何運(yùn)營(yíng)的實(shí)例帶入前臺(tái),然后清除它直到根Activity。這非常有用,例如,當(dāng)從NotificationManager處啟動(dòng)一個(gè)Activity。FLAG_ACTIVITY_RESET_TASK_IF_NEEDED假如設(shè)立這個(gè)標(biāo)志,這個(gè)activity不管是從一個(gè)新的棧啟動(dòng)還是從已有棧推到棧頂,它都將以thefrontdoorofthetask的方式啟動(dòng)。這就講導(dǎo)致任何與應(yīng)用相關(guān)的棧都講重置到正常狀態(tài)(不管是正在講activity移入還是移除),假如需要,或者直接重置該棧為初始狀態(tài)。FLAG_ACTIVITY_SINGLE_TOP
假如設(shè)立,當(dāng)這個(gè)Activity位于歷史stack的頂端運(yùn)營(yíng)時(shí),不再啟動(dòng)一個(gè)新的FLAG_ACTIVITY_BROUGHT_TO_FRONT?
這個(gè)標(biāo)志一般不是由程序代碼設(shè)立的,如在launchMode中設(shè)立singleTask模式時(shí)系統(tǒng)幫你設(shè)定。FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
假如設(shè)立,這將在Task的Activitystack中設(shè)立一個(gè)還原點(diǎn),當(dāng)Task恢復(fù)時(shí),需要清理Activity。也就是說,下一次Task帶著FLAG_ACTIVITY_RESET_TASK_IF_NEEDED標(biāo)記進(jìn)入前臺(tái)時(shí)(典型的操作是用戶在主畫面重啟它),這個(gè)Activity和它之上的都將關(guān)閉,以至于用戶不能再返回到它們,但是可以回到之前的Activity。?
這在你的程序有分割點(diǎn)的時(shí)候很有用。例如,一個(gè)e-mail應(yīng)用程序也許有一個(gè)操作是查看一個(gè)附件,需要啟動(dòng)圖片瀏覽Activity來顯示。這個(gè)Activity應(yīng)當(dāng)作為e-mail應(yīng)用程序Task的一部分,由于這是用戶在這個(gè)Task中觸發(fā)的操作。然而,當(dāng)用戶離開這個(gè)Task,然后從主畫面選擇e-mailapp,我們也許希望回到查看的會(huì)話中,但不是查看圖片附件,由于這讓人困惑。通過在啟動(dòng)圖片瀏覽時(shí)設(shè)定這個(gè)標(biāo)志,瀏覽及其它啟動(dòng)的Activity在下次用戶返回到mail程序時(shí)都將所有清除。FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS?
假如設(shè)立,新的Activity不會(huì)在最近啟動(dòng)的Activity的列表中保存。FLAG_ACTIVITY_FORWARD_RESULT
假如設(shè)立,并且這個(gè)Intent用于從一個(gè)存在的Activity啟動(dòng)一個(gè)新的Activity,那么,這個(gè)作為答復(fù)目的的Activity將會(huì)傳到這個(gè)新的Activity中。這種方式下,新的Activity可以調(diào)用setResult(int),并且這個(gè)結(jié)果值將發(fā)送給那個(gè)作為答復(fù)目的的Activity。FLAG_ACTIVITY_LAUNCHED_FROM_HISTO(shè)RY?
這個(gè)標(biāo)志一般不由應(yīng)用程序代碼設(shè)立,假如這個(gè)Activity是從歷史記錄里啟動(dòng)的(常按HOME鍵),那么,系統(tǒng)會(huì)幫你設(shè)定。FLAG_ACTIVITY_M(jìn)ULTIPLE_TASK
不要使用這個(gè)標(biāo)志,除非你自己實(shí)現(xiàn)了應(yīng)用程序啟動(dòng)器。與FLAG_ACTIVITY_NEW_TASK結(jié)合起來使用,可以禁用把已存的Task送入前臺(tái)的行為。當(dāng)設(shè)立時(shí),新的Task總是會(huì)啟動(dòng)來解決Intent,而不管這是是否已有一個(gè)Task可以解決相同的事情。?
由于默認(rèn)的系統(tǒng)不包含圖形Task管理功能,因此,你不應(yīng)當(dāng)使用這個(gè)標(biāo)志,除非你提供應(yīng)用戶一種方式可以返回到已經(jīng)啟動(dòng)的Task。?
假如FLAG_ACTIVITY_NEW_TASK標(biāo)志沒有設(shè)立,這個(gè)標(biāo)志被忽略。FLAG_ACTIVITY_NO_ANIMATION?
假如在Intent中設(shè)立,并傳遞給Context.startActivity()的話,這個(gè)標(biāo)志將阻止系統(tǒng)進(jìn)入下一個(gè)Activity時(shí)應(yīng)用Acitivity遷移動(dòng)畫。這并不意味著動(dòng)畫將永不運(yùn)營(yíng)——假如另一個(gè)Activity在啟動(dòng)顯示之前,沒有指定這個(gè)標(biāo)志,那么,動(dòng)畫將被應(yīng)用。這個(gè)標(biāo)志可以很好的用于執(zhí)行一連串的操作,而動(dòng)畫被看作是更高一級(jí)的事件的驅(qū)動(dòng)。FLAG_ACTIVITY_NO_HISTORY?
假如設(shè)立,新的Activity將不再歷史stack中保存。用戶一離開它,這個(gè)Activity就關(guān)閉了。這也可以通過設(shè)立noHistory特性。FLAG_ACTIVITY_NO_USER_ACTION?
假如設(shè)立,作為新啟動(dòng)的Activity進(jìn)入前臺(tái)時(shí),這個(gè)標(biāo)志將在Activity暫停之前阻止從最前方的Activity回調(diào)的onUserLeaveHint()。?
典型的,一個(gè)Activity可以依賴這個(gè)回調(diào)指明顯式的用戶動(dòng)作引起的Activity移出后臺(tái)。這個(gè)回調(diào)在Activity的生命周期中標(biāo)記一個(gè)合適的點(diǎn),并關(guān)閉一些Notification。?
假如一個(gè)Activity通過非用戶驅(qū)動(dòng)的事件,如來電或鬧鐘,啟動(dòng)的,這個(gè)標(biāo)志也應(yīng)當(dāng)傳遞給Context.startActivity,保證暫停的Activity不認(rèn)為用戶已經(jīng)知曉其Notification。FLAG_ACTIVITY_PREVIOUS_IS_TOP
Ifsetandthisintentisbeingusedtolaunchanewactivityfromanexistingone,thecurrentactivitywillnotbecountedasthetopactivityfordecidingwhetherthenewintentshouldbedeliveredtothetopinsteadofstartinganewone.Thepreviousactivitywillbeusedasthetop,withtheassumptionbeingthat(yī)thecurrentactivitywillfinishitselfimmediately.FLAG_ACTIVITY_REORDER_TO_FRONT
假如在Intent中設(shè)立,并傳遞給Context.startActivity(),這個(gè)標(biāo)志將引發(fā)已經(jīng)運(yùn)營(yíng)的Activity移動(dòng)到歷史stack的頂端。?
例如,假設(shè)一個(gè)Task由四個(gè)Activity組成:A,B,C,D。假如D調(diào)用startActivity()來啟動(dòng)ActivityB,那么,B會(huì)移動(dòng)到歷史stack的頂端,現(xiàn)在的順序變成A,C,D,B。假如FLAG_ACTIVITY_CLEAR_TO(shè)P標(biāo)志也設(shè)立的話,那么這個(gè)標(biāo)志將被忽略。請(qǐng)描述下Activity的生命周期。答:activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();可見生命周期:從onStart()直到系統(tǒng)調(diào)用onStop()前臺(tái)生命周期:從onResume()直到系統(tǒng)調(diào)用onPause()activity在屏幕旋轉(zhuǎn)時(shí)的生命周期答:不設(shè)立Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次;設(shè)立Activity的android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次;設(shè)立Activity的android:configChanges="orientation|keyboardHidden"時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法如何啟用Service,如何停用Service。服務(wù)的開發(fā)比較簡(jiǎn)樸,如下:第一步:繼承Service類publicclassSMSServiceextendsService{}第二步:在AndroidManifest.xml文獻(xiàn)中的<application>節(jié)點(diǎn)里對(duì)服務(wù)進(jìn)行配置:<serviceandroid:name=".SMSService"/>服務(wù)不能自己運(yùn)營(yíng),需要通過調(diào)用Context.startService()或Context.bindService()方法啟動(dòng)服務(wù)。這兩個(gè)方法都可以啟動(dòng)Service,但是它們的使用場(chǎng)合有所不同。使用startService()方法啟用服務(wù),調(diào)用者與服務(wù)之間沒有關(guān)連,即使調(diào)用者退出了,服務(wù)仍然運(yùn)營(yíng)。使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止,大有“不求同時(shí)生,必須同時(shí)死”的特點(diǎn)。假如打算采用Context.startService()方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStart()方法。假如調(diào)用startService()方法前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù),但會(huì)導(dǎo)致多次調(diào)用onStart()方法。采用startService()方法啟動(dòng)的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時(shí)會(huì)調(diào)用onDestroy()方法。假如打算采用Context.bindService()方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的onCreat(yī)e()方法,接著調(diào)用onBind()方法。這個(gè)時(shí)候調(diào)用者和服務(wù)綁定在一起,調(diào)用者退出了,系統(tǒng)就會(huì)先調(diào)用服務(wù)的onUnbind()方法,接著調(diào)用onDestroy()方法。假如調(diào)用bindService()方法前服務(wù)已經(jīng)被綁定,多次調(diào)用bindService()方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù)及綁定(也就是說onCreat(yī)e()和onBind()方法并不會(huì)被多次調(diào)用)。假如調(diào)用者希望與正在綁定的服務(wù)解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會(huì)導(dǎo)致系統(tǒng)調(diào)用服務(wù)的onUnbind()-->onDestroy()方法。服務(wù)常用生命周期回調(diào)方法如下:onCreat(yī)e()該方法在服務(wù)被創(chuàng)建時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無論調(diào)用多少次startService()或bindService()方法,服務(wù)也只被創(chuàng)建一次。onDestroy()該方法在服務(wù)被終止時(shí)調(diào)用。與采用Context.startService()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法onStart()只有采用Context.startService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在服務(wù)開始運(yùn)營(yíng)時(shí)被調(diào)用。多次調(diào)用startService()方法盡管不會(huì)多次創(chuàng)建服務(wù),但onStart()方法會(huì)被多次調(diào)用。與采用Context.bindService()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法onBind()只有采用Context.bindService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)綁定期被調(diào)用,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用Context.bindService()方法并不會(huì)導(dǎo)致該方法被多次調(diào)用。onUnbind()只有采用Context.bindService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)解除綁定期被調(diào)用注冊(cè)廣播有幾種方式,這些方式有何優(yōu)缺陷?請(qǐng)談?wù)凙ndroid引入廣播機(jī)制的用意。答:一方面寫一個(gè)類要繼承BroadcastReceiver第一種:在清單文獻(xiàn)中聲明,添加<receiveandroid:name=".IncomingSMSReceiver"><intent-filter><actionandroid:name="androvider.Telephony.SMS_RECEIVED")<intent-filter><receiver>第二種使用代碼進(jìn)行注冊(cè)如:IntentFilterfilter=newIntentFilter("android.provider.Telephony.SMS_RECEIVED");IncomingSMSReceiverreceiver=newIncomgSMSReceiver();registerReceiver(receiver.filter);兩種注冊(cè)類型的區(qū)別是:1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。2)第二種是常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,假如有信息廣播來,程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)營(yíng)。請(qǐng)解釋下在單線程模型中Message、Handler、MessageQueue、Looper之間的關(guān)系。答:簡(jiǎn)樸的說,Handler獲取當(dāng)前線程中的looper對(duì)象,looper用來從存放Message的MessageQueue中取出Message,再有Handler進(jìn)行Message的分發(fā)和解決.MessageQueue(消息隊(duì)列):用來存放通過Handler發(fā)布的消息,通常附屬于某一個(gè)創(chuàng)建它的線程,可以通過Looper.myQueue()得到當(dāng)前線程的消息隊(duì)列Handler:可以發(fā)布或者解決一個(gè)消息或者操作一個(gè)Runnable,通過Handler發(fā)布消息,消息將只會(huì)發(fā)送到與它關(guān)聯(lián)的消息隊(duì)列,然也只能解決該消息隊(duì)列中的消息Looper:是Handler和消息隊(duì)列之間通訊橋梁,程序組件一方面通過Handler把消息傳遞給Looper,Looper把消息放入隊(duì)列。Looper也把消息隊(duì)列里的消息廣播給所有的Handler:Handler接受到消息后調(diào)用handleMessage進(jìn)行解決Message:消息的類型,在Handler類中的handleMessage方法中得到單個(gè)的消息進(jìn)行解決在單線程模型下,為了線程通信問題,Android設(shè)計(jì)了一個(gè)MessageQueue(消息隊(duì)列),線程間可以通過該MessageQueue并結(jié)合Handler和Looper組件進(jìn)行信息互換。下面將對(duì)它們進(jìn)行分別介紹:1.MessageMessage消息,理解為線程間交流的信息,解決數(shù)據(jù)后臺(tái)線程需要更新UI,則發(fā)送Message內(nèi)含一些數(shù)據(jù)給UI線程。2.HandlerHandler解決者,是Message的重要解決者,負(fù)責(zé)Message的發(fā)送,Message內(nèi)容的執(zhí)行解決。后臺(tái)線程就是通過傳進(jìn)來的Handler對(duì)象引用來sendMessage(Message)。而使用Handler,需要implement該類的handleMessage(Message)方法,它是解決這些Message的操作內(nèi)容,例如Updat(yī)eUI。通常需要子類化Handler來實(shí)現(xiàn)handleMessage方法。3.MessageQueueMessageQueue消息隊(duì)列,用來存放通過Handler發(fā)布的消息,按照先進(jìn)先出執(zhí)行。每個(gè)messagequeue都會(huì)有一個(gè)相應(yīng)的Handler。Handler會(huì)向messagequeue通過兩種方法發(fā)送消息:sendMessage或post。這兩種消息都會(huì)插在messagequeue隊(duì)尾并按先進(jìn)先出執(zhí)行。但通過這兩種方法發(fā)送的消息執(zhí)行的方式略有不同:通過sendMessage發(fā)送的是一個(gè)message對(duì)象,會(huì)被Handler的handleMessage()函數(shù)解決;而通過post方法發(fā)送的是一個(gè)runnable對(duì)象,則會(huì)自己執(zhí)行。4.LooperLooper是每條線程里的MessageQueue的管家。Android沒有Global的MessageQueue,而Android會(huì)自動(dòng)替主線程(UI線程)建立MessageQueue,但在子線程里并沒有建立MessageQueue。所以調(diào)用Looper.getMainLooper()得到的主線程的Looper不為NULL,但調(diào)用Looper.myLooper()得到當(dāng)前線程的Looper就有也許為NULL。對(duì)于子線程使用Looper,APIDoc提供了對(duì)的的使用方法:這個(gè)Message機(jī)制的大約流程:1.在Looper.loop()方法運(yùn)營(yíng)開始后,循環(huán)地按照接受順序取出MessageQueue里面的非NULL的Message。2.一開始MessageQueue里面的Message都是NULL的。當(dāng)Handler.sendMessage(Message)到MessageQueue,該函數(shù)里面設(shè)立了那個(gè)Message對(duì)象的target屬性是當(dāng)前的Handler?qū)ο?。隨后Looper取出了那個(gè)Message,則調(diào)用該Message的target指向的Hander的dispatchMessage函數(shù)對(duì)Message進(jìn)行解決。在dispatchMessage方法里,如何解決Message則由用戶指定,三個(gè)判斷,優(yōu)先級(jí)從高到低:1)Message里面的Callback,一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象,其中run函數(shù)做解決工作;2)Handler里面的mCallback指向的一個(gè)實(shí)現(xiàn)了Callback接口的對(duì)象,由其handleMessage進(jìn)行解決;3)解決消息Handler對(duì)象相應(yīng)的類繼承并實(shí)現(xiàn)了其中handleMessage函數(shù),通過這個(gè)實(shí)現(xiàn)的handleMessage函數(shù)解決消息。由此可見,我們實(shí)現(xiàn)的handleMessage方法是優(yōu)先級(jí)最低的!3.Handler解決完該Message(updateUI)后,Looper則設(shè)立該Message為NULL,以便回收!在網(wǎng)上有很多文章講述主線程和其他子線程如何交互,傳送信息,最終誰來執(zhí)行解決信息之類的,個(gè)人理解是最簡(jiǎn)樸的方法——判斷Handler對(duì)象里面的Looper對(duì)象是屬于哪條線程的,則由該線程來執(zhí)行!1.當(dāng)Handler對(duì)象的構(gòu)造函數(shù)的參數(shù)為空,則為當(dāng)前所在線程的Looper;2.Looper.getMainLooper()得到的是主線程的Looper對(duì)象,Looper.myLooper()得到的是當(dāng)前線程的Looper對(duì)象。簡(jiǎn)要解釋一下activity、intent、intentfilter、service、Broadcase、BroadcaseReceiver答:一個(gè)activity呈現(xiàn)了一個(gè)用戶可以操作的可視化用戶界面;一個(gè)service不包含可見的用戶界面,而是在后臺(tái)運(yùn)營(yíng),可以與一個(gè)activity綁定,通過綁定暴露出來接口并與其進(jìn)行通信;一個(gè)broadcastreceiver是一個(gè)接受廣播消息并做出回應(yīng)的component,broadcastreceiver沒有界面;一個(gè)intent是一個(gè)Intent對(duì)象,它保存了消息的內(nèi)容。對(duì)于activity和service來說,它指定了請(qǐng)求的操作名稱和待操作數(shù)據(jù)的URI,Intent對(duì)象可以顯式的指定一個(gè)目的component。假如這樣的話,android會(huì)找到這個(gè)component(基于manifest文獻(xiàn)中的聲明)并激活它。但假如一個(gè)目的不是顯式指定的,android必須找到響應(yīng)intent的最佳component。它是通過將Intent對(duì)象和目的的intentfilter相比較來完畢這一工作的;一個(gè)component的intentfilter告訴android該component能解決的intent。intentfilter也是在manifest文獻(xiàn)中聲明的。說說mvc模式的原理,它在android中的運(yùn)用,android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?mvc是model,view,controller的縮寫,mvc包含三個(gè)部分:模型(model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)當(dāng)寫在該層。視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接受用戶的輸入,顯示解決結(jié)果??刂破?control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,響應(yīng)用戶出發(fā)的相關(guān)事件,交給m層解決。android鼓勵(lì)弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:1)視圖層(view):一般采用xml文獻(xiàn)進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,假如你對(duì)android了解的比較的多了話,就一定可以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通信,幸運(yùn)的是,android提供了它們之間非常方便的通信實(shí)現(xiàn)。2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層解決,這樣做的此外一個(gè)因素是android中的acitivity的響應(yīng)時(shí)間是5s,假如耗時(shí)的操作放在這里,程序就很容易被回收掉。3)模型層(model):對(duì)數(shù)據(jù)庫的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)當(dāng)在model里面解決,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。什么是ANR如何避免它?答:ANR:ApplicationNotResponding。在Android中,活動(dòng)管理器和窗口管理器這兩個(gè)系統(tǒng)服務(wù)負(fù)責(zé)監(jiān)視應(yīng)用程序的響應(yīng),當(dāng)用戶操作的在5s內(nèi)應(yīng)用程序沒能做出反映,BroadcastReceiver在10秒內(nèi)沒有執(zhí)行完畢,就會(huì)出現(xiàn)應(yīng)用程序無響應(yīng)對(duì)話框,這既是ANR。避免方法:Activity應(yīng)當(dāng)在它的關(guān)鍵生命周期方法(如onCreate()和onResume())里盡也許少的去做創(chuàng)建操作。潛在的耗時(shí)操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫操作,或者高耗時(shí)的計(jì)算如改變位圖尺寸,應(yīng)當(dāng)在子線程里(或者異步方式)來完畢。主線程應(yīng)當(dāng)為子線程提供一個(gè)Handler,以便完畢時(shí)可以提交給主線程。什么情況會(huì)導(dǎo)致ForceClose?如何避免?能否捕獲導(dǎo)致其的異常?答:程序出現(xiàn)異常,比如nullpointer。避免:編寫程序時(shí)邏輯連貫,思維縝密。能捕獲異常,在logcat(yī)中能看到異常信息描述一下android的系統(tǒng)架構(gòu)android系統(tǒng)架構(gòu)分從下往上為linux內(nèi)核層、運(yùn)營(yíng)庫、應(yīng)用程序框架層、和應(yīng)用程序?qū)?。linuxkernel:負(fù)責(zé)硬件的驅(qū)動(dòng)程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。libraries和androidruntime:libraries:即c/c++函數(shù)庫部分,大多數(shù)都是開放源代碼的函數(shù)庫,例如webkit(引擎),該函數(shù)庫負(fù)責(zé)android網(wǎng)頁瀏覽器的運(yùn)營(yíng),例如標(biāo)準(zhǔn)的c函數(shù)庫libc、openssl、sqlite等,當(dāng)然也涉及支持游戲開發(fā)2dsgl和3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文獻(xiàn)的播放與顯示,例如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體文獻(xiàn)格式。android的runtime負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼。applicationframework(應(yīng)用軟件架構(gòu)),java應(yīng)用程序開發(fā)人員重要是使用該層封裝好的api進(jìn)行快速開發(fā)。applications:該層是java的應(yīng)用程序?qū)?android內(nèi)置的googlemaps、e-mail、即時(shí)通信工具、瀏覽器、mp3播放器等處在該層,java開發(fā)人員開發(fā)的程序也處在該層,并且和內(nèi)置的應(yīng)用程序具有平等的位置,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序。上面的四個(gè)層次,下層為上層服務(wù),上層需要下層的支持,調(diào)用下層的服務(wù),這種嚴(yán)格分層的方式帶來的極大的穩(wěn)定性、靈活性和可擴(kuò)展性,使得不同層的開發(fā)人員可以按照規(guī)范專心特定層的開發(fā)。android應(yīng)用程序使用框架的api并在框架下運(yùn)營(yíng),這就帶來了程序開發(fā)的高度一致性,另一方面也告訴我們,要想寫出優(yōu)質(zhì)高效的程序就必須對(duì)整個(gè)applicat(yī)ionframework進(jìn)行非常進(jìn)一步的理解。精通applicationframework,你就可以真正的理解android的設(shè)計(jì)和運(yùn)營(yíng)機(jī)制,也就更可以駕馭整個(gè)應(yīng)用層的開發(fā)。請(qǐng)介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。一個(gè)程序可以通過實(shí)現(xiàn)一個(gè)Contentprovider的抽象接口將自己的數(shù)據(jù)完全暴露出去,并且Contentproviders是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露。Contentproviders存儲(chǔ)和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個(gè)屬于你自己的Contentprovider或者將你的數(shù)據(jù)添加到一個(gè)已經(jīng)存在的Contentprovider中,前提是有相同數(shù)據(jù)類型并且有寫入Contentprovider的權(quán)限。如何通過一套標(biāo)準(zhǔn)及統(tǒng)一的接口獲取其他應(yīng)用程序暴露的數(shù)據(jù)? Android提供了ContentResolver,外界的程序可以通過ContentResolver接口訪問ContentProvider提供的數(shù)據(jù)。Service和Thread的區(qū)別?答:servie是系統(tǒng)的組件,它由系統(tǒng)進(jìn)程托管(servicemanager);它們之間的通信類似于client和server,是一種輕量級(jí)的ipc通信,這種通信的載體是binder,它是在linux層互換信息的一種ipc。而thread是由本應(yīng)用程序托管。
1).Thread:Thread是程序執(zhí)行的最小單元,它是分派CPU的基本單位??梢杂肨hread來執(zhí)行一些異步的操作。2).Service:Service是android的一種機(jī)制,當(dāng)它運(yùn)營(yíng)的時(shí)候假如是LocalService,那么相應(yīng)的Service是運(yùn)營(yíng)在主進(jìn)程的main線程上的。如:onCreat(yī)e,onStart這些函數(shù)在被系統(tǒng)調(diào)用的時(shí)候都是在主進(jìn)程的main線程上運(yùn)營(yíng)的。假如是Remote
Service,那么相應(yīng)的Service則是運(yùn)營(yíng)在獨(dú)立進(jìn)程的main線程上。既然這樣,那么我們?yōu)槭裁匆肧ervice呢?其實(shí)這跟android的系統(tǒng)機(jī)制有關(guān),我們先拿Thread來說。Thread的運(yùn)營(yíng)是獨(dú)立于Activity的,也就是說當(dāng)一個(gè)Activity被finish之后,假如你沒有積極停止Thread
或者Thread里的
run方法沒有執(zhí)行完畢的話,Thread
也會(huì)一直執(zhí)行。因此這里會(huì)出現(xiàn)一個(gè)問題:當(dāng)Activity被finish之后,你不再持有該Thread的引用。另一方面,你沒有辦法在不同的Activity中對(duì)同一Thread進(jìn)行控制。
舉個(gè)例子:假如你的Thread需要不斷地隔一段時(shí)間就要連接服務(wù)器做某種同步的話,該Thread
需要在Activity沒有start的時(shí)候也在運(yùn)營(yíng)。這個(gè)時(shí)候當(dāng)你start一個(gè)Activity就沒有辦法在該Activity里面控制之前創(chuàng)建的Thread。因此你便需要?jiǎng)?chuàng)建并啟動(dòng)一個(gè)Service,在Service里面創(chuàng)建、運(yùn)營(yíng)并控制該Thread,這樣便解決了該問題(由于任何Activity都可以控制同一Service,而系統(tǒng)也只會(huì)創(chuàng)建一個(gè)相應(yīng)Service的實(shí)例)。
因此你可以把Service想象成一種消息服務(wù),而你可以在任何有Context的地方調(diào)用Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在Service里注冊(cè)BroadcastReceiver,在其他地方通過發(fā)送broadcast來控制它,當(dāng)然這些都是Thread做不到的。Android自身的api并未聲明會(huì)拋出異常,則其在運(yùn)營(yíng)時(shí)有無也許拋出runtime異常,你碰到過嗎?諾有的話會(huì)導(dǎo)致什么問題?如何解決?答:會(huì),比如nullpointerException。我碰到過,比如textview.setText()時(shí),textview沒有初始化。會(huì)導(dǎo)致程序無法正常運(yùn)營(yíng)出現(xiàn)forceclose。打開控制臺(tái)查看logcat信息找出異常信息并修改程序。IntentService有何優(yōu)點(diǎn)?答:Acitivity的進(jìn)程,當(dāng)解決Intent的時(shí)候,會(huì)產(chǎn)生一個(gè)相應(yīng)的Service;Android的進(jìn)程解決器現(xiàn)在會(huì)盡也許的不kill掉你;非常容易使用假如后臺(tái)的Activity由于某因素被系統(tǒng)回收了,如何在被系統(tǒng)回收之前保存當(dāng)前狀態(tài)?答:重寫onSaveInstanceState()方法,在此方法中保存需要保存的數(shù)據(jù),該方法將會(huì)在activity被回收之前調(diào)用。通過重寫onRestoreInstanceState()方法可以從中提取保存好的數(shù)據(jù)如何將一個(gè)Activity設(shè)立成窗口的樣式。答:<activity>中配置:android
:theme="@android:style/Theme.Dialog"
此外android:theme="@android:style/Theme.Translucent"
是設(shè)立透明如何退出Activity?如何安全退出已調(diào)用多個(gè)Activity的Application?答:對(duì)于單一Activity的應(yīng)用來說,退出很簡(jiǎn)樸,直接finish()即可。當(dāng)然,也可以用killProcess()和System.exit()這樣的方法。對(duì)于多個(gè)activity,1、記錄打開的Activity:每打開一個(gè)Activity,就記錄下來。在需要退出時(shí),關(guān)閉每一個(gè)Activity即可。2、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時(shí),發(fā)送一個(gè)特定的廣播,每個(gè)Activity收到廣播后,關(guān)閉即可。3、遞歸退出:在打開新的Activity時(shí)使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中解決,遞歸關(guān)閉。為了編程方便,最佳定義一個(gè)Activity基類,解決這些共通問題。在2.1之前,可以使用ActivityManager的restartPackage方法。它可以直接結(jié)束整個(gè)應(yīng)用。在使用時(shí)需要權(quán)限android.permission.RESTART_PACKAGES。注意不要被它的名字迷惑??墒?在2.2,這個(gè)方法失效了。在2.2添加了一個(gè)新的方法,killBackgroundProcesses(),需要權(quán)限android.permission.KILL_BACKGROUND_PROCESSES。可惜的是,它和2.2的restartPackage同樣,主線起不到應(yīng)有的效果。此外尚有一個(gè)方法,就是系統(tǒng)自帶的應(yīng)用程序管理里,強(qiáng)制結(jié)束程序的方法,forceStopPackage()。它需要權(quán)限android.permission.FORCE_STO(shè)P_PACKAGES。并且需要添加android:sharedUserId="android.uid.system"屬性。同樣可惜的是,該方法是非公開的,他只能運(yùn)營(yíng)在系統(tǒng)進(jìn)程,第三方程序無法調(diào)用。由于需要在Android.mk中添加LOCAL_CERTIFICATE:=plat(yī)form。而Android.mk是用于在Android源碼下編譯程序用的。從以上可以看出,在2.2,沒有辦法直接結(jié)束一個(gè)應(yīng)用,而只能用自己的辦法間接辦到?,F(xiàn)提供幾個(gè)方法,供參考:1、拋異常強(qiáng)制退出:該方法通過拋異常,使程序ForceClose。驗(yàn)證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出ForceClose的窗口。2、記錄打開的Activity:每打開一個(gè)Activity,就記錄下來。在需要退出時(shí),關(guān)閉每一個(gè)Activity即可。3、發(fā)送特定廣播:在需要結(jié)束應(yīng)用時(shí),發(fā)送一個(gè)特定的廣播,每個(gè)Activity收到廣播后,關(guān)閉即可。4、遞歸退出在打開新的Activity時(shí)使用startActivityForResult,然后自己加標(biāo)志,在onA(yù)ctivityResult中解決,遞歸關(guān)閉。除了第一個(gè),都是想辦法把每一個(gè)Activity都結(jié)束掉,間接達(dá)成目的。但是這樣做同樣不完美。你會(huì)發(fā)現(xiàn),假如自己的應(yīng)用程序?qū)γ恳粋€(gè)Activity都設(shè)立了nosensor,在兩個(gè)Activity結(jié)束的間隙,sensor也許有效了。但至少,我們的目的達(dá)成了,并且沒有影響用戶使用。為了編程方便,最佳定義一個(gè)Activity基類,解決這些共通問題。AIDL的全稱是什么?如何工作?能解決哪些類型的數(shù)據(jù)?答:全稱是:AndroidInterfaceDefineLanguage在Android中,每個(gè)應(yīng)用程序都可以有自己的進(jìn)程.在寫UI應(yīng)用的時(shí)候,經(jīng)常要用到Service.在不同的進(jìn)程中,如何傳遞對(duì)象呢?顯然,Java中不允許跨進(jìn)程內(nèi)存共享.因此傳遞對(duì)象,只能把對(duì)象拆提成操作系統(tǒng)能理解的簡(jiǎn)樸形式,以達(dá)成跨界對(duì)象訪問的目的.在J2EE中,采用RMI的方式,可以通過序列化傳遞對(duì)象.在Android中,則采用AIDL的方式.理論上AIDL可以傳遞Bundle,事實(shí)上做起來卻比較麻煩。AIDL(AndRoid接口描述語言)是一種借口描述語言;編譯器可以通過aidl文獻(xiàn)生成一段代碼,通過預(yù)先定義的接口達(dá)成兩個(gè)進(jìn)程內(nèi)部通信進(jìn)程的目的.假如需要在一個(gè)Activity中,訪問另一個(gè)Service中的某個(gè)對(duì)象,需要先將對(duì)象轉(zhuǎn)化成AIDL可辨認(rèn)的參數(shù)(也許是多個(gè)參數(shù)),然后使用AIDL來傳遞這些參數(shù),在消息的接受端,使用這些參數(shù)組裝成自己需要的對(duì)象.AIDL的IPC的機(jī)制和COM或CORBA類似,是基于接口的,但它是輕量級(jí)的。它使用代理類在客戶端和實(shí)現(xiàn)層間傳遞值.假如要使用AIDL,需要完畢2件事情:1.引入AIDL的相關(guān)類.;2.調(diào)用aidl產(chǎn)生的class.AIDL的創(chuàng)建方法:AIDL語法很簡(jiǎn)樸,可以用來聲明一個(gè)帶一個(gè)或多個(gè)方法的接口,也可以傳遞參數(shù)和返回值。由于遠(yuǎn)程調(diào)用的需要,這些參數(shù)和返回值并不是任何類型.下面是些AIDL支持的數(shù)據(jù)類型:1.不需要import聲明的簡(jiǎn)樸Java編程語言類型(int,boolean等)2.String,CharSequence不需要特殊聲明3.List,Map和Parcelables類型,這些類型內(nèi)所包含的數(shù)據(jù)成員也只能是簡(jiǎn)樸數(shù)據(jù)類型,String等其他比支持的類型.(此外:我沒嘗試Parcelables,在Eclipse+ADT下編譯但是,或許以后會(huì)有所支持)請(qǐng)解釋下Android程序運(yùn)營(yíng)時(shí)權(quán)限與文獻(xiàn)系統(tǒng)權(quán)限的區(qū)別。答:運(yùn)營(yíng)時(shí)權(quán)限D(zhuǎn)alvik(android授權(quán))文獻(xiàn)系統(tǒng)linux內(nèi)核授權(quán)系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請(qǐng)說明原由。通過直接發(fā)送Uri把參數(shù)帶過去,或者通過manifest里的intentfilter里的dat(yī)a屬性android系統(tǒng)的優(yōu)勢(shì)和局限性答:Android平臺(tái)手機(jī)5大優(yōu)勢(shì):一、開放性在優(yōu)勢(shì)方面,Android平臺(tái)一方面就是其開發(fā)性,開發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者,隨著用戶和應(yīng)用的日益豐富,一個(gè)嶄新的平臺(tái)也將不久走向成熟。開放性對(duì)于Android的發(fā)展而言,有助于積累人氣,這里的人氣涉及消費(fèi)者和廠商,而對(duì)于消費(fèi)者來講,隨大的受益正是豐富的軟件資源。開放的平臺(tái)也會(huì)帶來更大競(jìng)爭(zhēng),如此一來,消費(fèi)者將可以用更低的價(jià)位購得心儀的手機(jī)。二、掙脫運(yùn)營(yíng)商的束縛在過去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),手機(jī)應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。從去年iPhone上市,用戶可以更加方便地連接網(wǎng)絡(luò),運(yùn)營(yíng)商的制約減少。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過渡和提高,手機(jī)隨意接入網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談,當(dāng)你可以通過手機(jī)IM軟件方便地進(jìn)行即時(shí)聊天時(shí),再回想不久前天價(jià)的彩信和圖鈴下載業(yè)務(wù),是不是像惡夢(mèng)同樣?互聯(lián)網(wǎng)巨頭Google推動(dòng)的Android終端天生就有網(wǎng)絡(luò)特色,將讓用戶離互聯(lián)網(wǎng)更近。三、豐富的硬件選擇這一點(diǎn)還是與Android平臺(tái)的開放性相關(guān),由于Android的開放性,眾多的廠商會(huì)推出千奇百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件的兼容,好比你從諾基亞Symbian風(fēng)格手機(jī)一下改用蘋果iPhone,同時(shí)還可將Symbian中優(yōu)秀的軟件帶到iPhone上使用、聯(lián)系人等資料更是可以方便地轉(zhuǎn)移,是不是非常方便呢?四、不受任何限制的開發(fā)商Android平臺(tái)提供應(yīng)第三方開發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不會(huì)受到各種條條框框的阻擾,可想而知,會(huì)有多少新奇別致的軟件會(huì)誕生。但也有其兩面性,血腥、暴力、情色方面的程序和游戲如可控制正是留給Android難題之一。五、無縫結(jié)合的Google應(yīng)用如今叱詫互聯(lián)網(wǎng)的Google已經(jīng)走過2023度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而Android平臺(tái)手機(jī)將無縫結(jié)合這些優(yōu)秀的Google服務(wù)。再說Android的5大局限性:一、安全和隱私由于手機(jī)與互聯(lián)網(wǎng)的緊密聯(lián)系,個(gè)人隱私很難得到保守。除了上網(wǎng)過程中經(jīng)意或不經(jīng)意留下的個(gè)人足跡,Google這個(gè)巨人也時(shí)時(shí)站在你的身后,洞穿一切,因此,互聯(lián)網(wǎng)的進(jìn)一步將會(huì)帶來新一輪的隱私危機(jī)。二、一方面開賣Android手機(jī)的不是最大運(yùn)營(yíng)商眾所周知,T-Mobile在23日,于美國(guó)紐約發(fā)布了Android首款手機(jī)G1。但是在北美市場(chǎng),最大的兩家運(yùn)營(yíng)商乃AT&T和Verizon,而目前所知取得Android手機(jī)銷售權(quán)的僅有T-Mobile和Sprint,其中T-Mobile的3G網(wǎng)絡(luò)相對(duì)于其他三家也要遜色不少,因此,用戶可以買賬購買G1,能否體驗(yàn)到最佳的3G網(wǎng)絡(luò)服務(wù)則要另當(dāng)別論了!三、運(yùn)營(yíng)商仍然可以影響到Android手機(jī)在國(guó)內(nèi)市場(chǎng),不少用戶對(duì)購得移動(dòng)定制機(jī)不滿,感覺所購的手機(jī)被人涂畫了廣告一般。這樣的情況在國(guó)外市場(chǎng)同樣出現(xiàn)。Android手機(jī)的另一發(fā)售運(yùn)營(yíng)商Sprint就將在其機(jī)型中內(nèi)置其手機(jī)商店程序。四、同類機(jī)型用戶減少在不少手機(jī)論壇都會(huì)有針對(duì)某一型號(hào)的子論壇,對(duì)一款手機(jī)的使專心得交流,并分享軟件資源。而對(duì)于Android平臺(tái)手機(jī),由于廠商豐富,產(chǎn)品類型多樣,這樣使用同一款機(jī)型的用戶越來越少,缺少統(tǒng)一機(jī)型的程序強(qiáng)化。舉個(gè)稍顯不妥的例子,現(xiàn)在山寨機(jī)泛濫,品種各異,就很少有專門針對(duì)某個(gè)型號(hào)山寨機(jī)的討論和群組,除了哪些功能異常搶眼、頗受追捧的機(jī)型以外。五、過度依賴開發(fā)商缺少標(biāo)準(zhǔn)配置在使用PC端的WindowsXp系統(tǒng)的時(shí)候,都會(huì)內(nèi)置微軟WindowsMediaPlayer這樣一個(gè)瀏覽器程序,用戶可以選擇更多樣的播放器,如Realplay或暴風(fēng)影音等。但入手開始使用默認(rèn)的程序同樣可以應(yīng)付多樣的需要。在Android平臺(tái)中,由于其開放性,軟件更多依賴第三方廠商,比如Android系統(tǒng)的SDK中就沒有內(nèi)置音樂播放器,所有依賴第三方開發(fā),缺少了產(chǎn)品的統(tǒng)一性。Androiddvm的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程是否為同一個(gè)概念答:DVM指dalivk的虛擬機(jī)。每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)營(yíng),都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。而每一個(gè)DVM都是在Linux中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念。sim卡的EF文獻(xiàn)是什么?有何作用答:sim卡的文獻(xiàn)系統(tǒng)有自己規(guī)范,重要是為了和手機(jī)通訊,sim本身可以有自己的操作系統(tǒng),EF就是作存儲(chǔ)并和手機(jī)通訊用的嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性頁式,段式,段頁,用到了MMU,虛擬空間等技術(shù)什么是嵌入式實(shí)時(shí)操作系統(tǒng),Android操作系統(tǒng)屬于實(shí)時(shí)操作系統(tǒng)嗎?嵌入式實(shí)時(shí)操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時(shí),可以接受并以足夠快的速度予以解決,其解決的結(jié)果又能在規(guī)定的時(shí)間之內(nèi)來控制生產(chǎn)過程或?qū)鉀Q系統(tǒng)作出快速響應(yīng),并控制所有實(shí)時(shí)任務(wù)協(xié)調(diào)一致運(yùn)營(yíng)的嵌入式操作系統(tǒng)。重要用于工業(yè)控制、軍事設(shè)備、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時(shí)間有苛刻的規(guī)定,這就需要使用實(shí)時(shí)系統(tǒng)。又可分為軟實(shí)時(shí)和硬實(shí)時(shí)兩種,而android是基于linux內(nèi)核的,因此屬于軟實(shí)時(shí)。一條最長(zhǎng)的短信息約占多少byte?中文70(涉及標(biāo)點(diǎn)),英文160,160個(gè)字節(jié)。有一個(gè)一維整型數(shù)組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請(qǐng)寫一個(gè)算法,將該圖片所有的白色不透明(0xffffffff)像素點(diǎn)的透明度調(diào)整為50%。如何將SQLite數(shù)據(jù)庫(dictionary.db文獻(xiàn))與apk文獻(xiàn)一起發(fā)布解答:可以將dictionary.db文獻(xiàn)復(fù)制到EclipseAndroid工程中的resaw目錄中。所有在resaw目錄中的文獻(xiàn)不會(huì)被壓縮,這樣可以直接提取該目錄中的文獻(xiàn)??梢詫ⅲ鋓ctionary.db文獻(xiàn)復(fù)制到resaw目錄中如何將打開resaw目錄中的數(shù)據(jù)庫文獻(xiàn)?解答:在Android中不能直接打開resaw目錄中的數(shù)據(jù)庫文獻(xiàn),而需要在程序第一次啟動(dòng)時(shí)將該文獻(xiàn)復(fù)制到手機(jī)內(nèi)存或SD卡的某個(gè)目錄中,然后再打開該數(shù)據(jù)庫文獻(xiàn)。復(fù)制的基本方法是使用getResources().openRawResource方法獲得resaw目錄中資源的InputStream對(duì)象,然后將該InputStream對(duì)象中的數(shù)據(jù)寫入其他的目錄中相應(yīng)文獻(xiàn)中。在AndroidSDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數(shù)據(jù)庫文獻(xiàn)。DDMS和TraceView的區(qū)別?DDMS是一個(gè)程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器。java中如何引用本地語言可以用JNI(javanativeinterfacejava本地接口)接口。談?wù)凙ndroid的IPC(進(jìn)程間通信)機(jī)制IPC是內(nèi)部進(jìn)程通信的簡(jiǎn)稱,是共享"命名管道"的資源。Android中的IPC機(jī)制是為了讓Activity和Service之間可以隨時(shí)的進(jìn)行交互,故在Android中該機(jī)制,只合用于Activity和Service之間的通信,類似于遠(yuǎn)程方法調(diào)用,類似于C/S模式的訪問。通過定義AIDL接口文獻(xiàn)來定義IPC接口。Servier端實(shí)現(xiàn)IPC接口,Client端調(diào)用IPC接口本地代理。NDK是什么NDK是一些列工具的集合,NDK提供了一系列的工具,幫助開發(fā)者迅速的開發(fā)C/C++的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用打成apk包。NDK集成了交叉編譯器,并提供了相應(yīng)的mk文獻(xiàn)和隔離cpu、平臺(tái)等的差異,開發(fā)人員只需簡(jiǎn)樸的修改mk文獻(xiàn)就可以創(chuàng)建出soAndroid面試基礎(chǔ)題做下總結(jié)Intent的幾種有關(guān)Activity啟動(dòng)的方式有哪些,你了解每個(gè)含義嗎?這里Android123提醒大家,Intent的一些標(biāo)記有FLAG_ACTIVITY_BROUGHT_TO(shè)_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK等。每種含義大家看SDK文檔和具體跑下這樣你的記憶會(huì)更深刻些。2.Activity和Task的啟動(dòng)模式有哪些?每種含義是什么?有關(guān)在AndroidManifest.xml中的android:launchMode定義,重要有standard、singleTop、singleTask和singleInstance,同時(shí)對(duì)于android:taskAffinity這些問題大家也要了解,Android開發(fā)網(wǎng)在以前的文章中講過,但是很多開發(fā)者仍然不是很清楚,這些基礎(chǔ)問題我們以后仍然會(huì)再次總結(jié)。關(guān)于Activity的啟動(dòng)模式,參考:3.通過Intent傳遞一些二進(jìn)制數(shù)據(jù)的方法有哪些?1).使用Serializable接口實(shí)現(xiàn)序列化,這是Java常用的方法。2).實(shí)現(xiàn)Parcelable接口,這里Android的部分類比如Bitmap類就已經(jīng)實(shí)現(xiàn)了,同時(shí)Parcelable在AndroidAIDL中互換數(shù)據(jù)也很常見的。4.能說下Android應(yīng)用的入口點(diǎn)嗎?真正的Android入口點(diǎn)是application的main,你可以看下androidmanifest.xml的包含關(guān)系就清楚了??梢詻]有Activity但是必須有Application5.Android都有哪些XML解析器,都純熟掌握嗎?這里XmlPull、SAX和DOM相信做過Web開發(fā)的都已經(jīng)滾瓜爛熟了。6.SQLite支持事務(wù)嗎?添加刪除如何提高性能?SQLite作為輕量級(jí)的數(shù)據(jù)庫,比MySQL還小,但支持SQL語句查詢,提高性能可以考慮通過原始通過優(yōu)化的SQL查詢語句方式解決。7.AndroidService和Binder、AIDL你都純熟嗎?作為Android重要的后臺(tái)服務(wù),這些每個(gè)Android開發(fā)者都應(yīng)當(dāng)掌握,這也算是和JavaSE最大的不同了,具體的實(shí)例大家可以查看Android音樂播放器的源代碼Music.git中的,這里不再贅述。8.你用過哪款A(yù)ndroid手機(jī),有哪些優(yōu)點(diǎn)和局限性,相對(duì)于iPhone或Symbian又有哪些優(yōu)缺陷?把這個(gè)作為面試題也是考察下,可以大約了解到它對(duì)Android的了解限度,多移動(dòng)開發(fā)的結(jié)識(shí)。1.請(qǐng)描述下Activity的生命周期。創(chuàng)建oncreate-啟動(dòng)onstart–恢復(fù)onResume–暫停onPause–結(jié)束onEnd–銷毀onDestroy2.假如后臺(tái)的Act
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年東莞道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 2025年慶陽如何考貨運(yùn)從業(yè)資格證
- 2025年東莞道路運(yùn)輸從業(yè)資格證考試
- 2025年西藏貨運(yùn)從業(yè)資格考試題目
- 叉車應(yīng)急事故現(xiàn)場(chǎng)演練
- 手術(shù)室放射防護(hù)培訓(xùn)
- 停車場(chǎng)操作規(guī)范樣本
- 2024年浙江省中考語文真題卷及答案解析
- 軟件開發(fā)服務(wù)合作合同管理要點(diǎn)
- 商業(yè)步行街廣告位租賃協(xié)議
- 開題報(bào)告:職普融通與職業(yè)教育高質(zhì)量發(fā)展:從國(guó)際經(jīng)驗(yàn)到中國(guó)路徑創(chuàng)新
- 變、配電站防火制度范文(2篇)
- 九年級(jí)上冊(cè)人教版數(shù)學(xué)期末綜合知識(shí)模擬試卷(含答案)
- 商標(biāo)出租合同范例
- 重大版小英小學(xué)六年級(jí)上期期末測(cè)試
- 微積分知到智慧樹章節(jié)測(cè)試課后答案2024年秋銅陵學(xué)院
- 金融科技UI設(shè)計(jì)
- 《頭腦風(fēng)暴》課件
- 安全生產(chǎn)知識(shí)考試題庫(有答案)-安全考試題庫
- 人教版(2024)八年級(jí)上冊(cè)物理第六章 質(zhì)量與密度 單元測(cè)試卷(含答案解析)
- 會(huì)計(jì)助理個(gè)人年終工作總結(jié)
評(píng)論
0/150
提交評(píng)論