版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Android系統(tǒng)架構(gòu)和應(yīng)用程序基本概念對(duì)\t"/kf/201808/_blank"Android\t"/kf/201808/_blank"系統(tǒng)應(yīng)用程序的基本架構(gòu)進(jìn)行一個(gè)詳細(xì)了解,對(duì)于開(kāi)發(fā)者來(lái)說(shuō)能更有效的開(kāi)發(fā)Android系統(tǒng)應(yīng)用程序.對(duì)于一個(gè)Android應(yīng)用程序來(lái)說(shuō),是由四種構(gòu)造塊組織而成的,這四種構(gòu)造塊如下:ActivityIntentReceiverServiceContentProvider但是,并不是每一個(gè)Android系統(tǒng)應(yīng)用程序都需要這四種構(gòu)造塊,這不是必須的,某些時(shí)候,我們只需要這四種中的幾種組合成我們的應(yīng)用。當(dāng)我們明確了我們的應(yīng)用需要哪些構(gòu)造塊后,我們就需要在AndroidManifest.xml中登記這些構(gòu)造塊的清單。這是一個(gè)XML配置文件,這個(gè)配置文件用于定義我們的應(yīng)用程序的\t"/kf/201808/_blank"組件、組件的功能及必要條件等。這個(gè)配置文件是每個(gè)Android應(yīng)用必需的。對(duì)于AndroidMainfest.xml的Schema,參考SDK包附帶的文檔。以下,我們對(duì)四種構(gòu)造塊做一些說(shuō)明:1、ActivityActivity是Android系統(tǒng)應(yīng)用程序中構(gòu)造塊中最基本的一種,在應(yīng)用中,一個(gè)activity通常就是一個(gè)單獨(dú)的屏幕。每一個(gè)activity都被實(shí)現(xiàn)為一個(gè)獨(dú)立的類(lèi),并且繼承于Activity這個(gè)基類(lèi)。這個(gè)activity類(lèi)將會(huì)顯示由幾個(gè)Views控件組成的用戶接口,并對(duì)事件做出響應(yīng)。大部份的應(yīng)用都會(huì)包含多個(gè)的屏幕。例如,一個(gè)短消息應(yīng)用程序?qū)?huì)有一個(gè)屏幕用于顯示聯(lián)系人列表,第二個(gè)屏幕用于寫(xiě)短消息,同時(shí)還會(huì)有用于瀏覽舊短消息及進(jìn)行系統(tǒng)設(shè)置的屏幕。每一個(gè)這樣的屏幕,就是一個(gè)activity。從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。在一些應(yīng)用中,一個(gè)屏幕甚至?xí)祷刂到o前一個(gè)屏幕。當(dāng)一個(gè)新的屏幕打開(kāi)后,前一個(gè)屏幕將會(huì)暫停,并保存在歷史堆棧中。用戶可以返回到歷史堆棧中的前一個(gè)屏幕。當(dāng)屏幕不再使用時(shí),還可以從歷史堆棧中刪除。默認(rèn)情況下,Android將會(huì)保留從主屏幕到每一個(gè)應(yīng)用的運(yùn)行屏幕。Android系統(tǒng)應(yīng)用程序使用了Intent這個(gè)特殊類(lèi),實(shí)現(xiàn)在屏幕與屏幕之間移動(dòng)。Intent類(lèi)用于描述一個(gè)應(yīng)用將會(huì)做什么事。在Intent的描述結(jié)構(gòu)中,有兩個(gè)最重要的部分:動(dòng)作和動(dòng)作對(duì)應(yīng)的數(shù)據(jù)。典型的動(dòng)作類(lèi)型有:MAIN(activity的門(mén)戶)、VIEW、PICK、EDIT等。而動(dòng)作對(duì)應(yīng)的數(shù)據(jù)則以URI的形式進(jìn)行表示。例如:要查看一個(gè)人的聯(lián)系方式,你需要?jiǎng)?chuàng)建一個(gè)動(dòng)作類(lèi)型為VIEW的intent,以及一個(gè)表示這個(gè)人的URI。與之有關(guān)系的一個(gè)類(lèi)叫IntentFilter。相對(duì)于intent是一個(gè)有效的做某事的請(qǐng)求,一個(gè)intentfilter則用于描述一個(gè)activity(或者IntentReceiver)能夠操作哪些intent。一個(gè)activity如果要顯示一個(gè)人的聯(lián)系方式時(shí),需要聲明一個(gè)IntentFilter,這個(gè)IntentFilter要知道怎么去處理VIEW動(dòng)作和表示一個(gè)人的URI。IntentFilter需要在AndroidManifest.xml中定義。通過(guò)解析各種intent,從一個(gè)屏幕導(dǎo)航到另一個(gè)屏幕是很簡(jiǎn)單的。當(dāng)向前導(dǎo)航時(shí),activity將會(huì)調(diào)用startActivity(IntentmyIntent)方法。然后,系統(tǒng)會(huì)在所有安裝的應(yīng)用程序中定義的IntentFilter中查找,找到最匹配myIntent的Intent對(duì)應(yīng)的activity。新的activity接收到myIntent的通知后,開(kāi)始運(yùn)行。當(dāng)startActivity方法被調(diào)用將觸發(fā)解析myIntent的動(dòng)作,這個(gè)機(jī)制提供了兩個(gè)關(guān)鍵好處:A、Activities能夠重復(fù)利用從其它組件中以Intent的形式產(chǎn)生的一個(gè)請(qǐng)求;B、Activities可以在任何時(shí)候被一個(gè)具有相同IntentFilter的新的Activity取代。2、IntentReceiver當(dāng)你希望你的應(yīng)用能夠?qū)σ粋€(gè)外部的事件(如當(dāng)電話呼入時(shí),或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí),或者到了晚上時(shí))做出響應(yīng),你可以使用一個(gè)IntentReceiver。雖然IntentReceiver在感興趣的事件發(fā)生時(shí),會(huì)使用NotificationManager通知用戶,但它并不能生成一個(gè)UI。IntentReceiver在AndroidManifest.xml中注冊(cè),但也可以在代碼中使用Context.registerReceiver()進(jìn)行注冊(cè)。當(dāng)一個(gè)intentreceiver被觸發(fā)時(shí),你的應(yīng)用不必對(duì)請(qǐng)求調(diào)用intentreceiver,系統(tǒng)會(huì)在需要的時(shí)候啟動(dòng)你的應(yīng)用。各種應(yīng)用還可以通過(guò)使用Context.broadcastIntent()將它們自己的intentreceiver廣播給其它應(yīng)用程序。3、Service一個(gè)Service是一段長(zhǎng)生命周期的,沒(méi)有用戶界面的程序。比較好的一個(gè)例子就是一個(gè)正在從播放列表中播放歌曲的媒體播放器。在一個(gè)媒體播放器的應(yīng)用中,應(yīng)該會(huì)有多個(gè)activity,讓使用者可以選擇歌曲并播放歌曲。然而,音樂(lè)重放這個(gè)功能并沒(méi)有對(duì)應(yīng)的activity,因?yàn)槭褂谜弋?dāng)然會(huì)認(rèn)為在導(dǎo)航到其它屏幕時(shí)音樂(lè)應(yīng)該還在播放的。在這個(gè)例子中,媒體播放器這個(gè)activity會(huì)使用Context.startService()來(lái)啟動(dòng)一個(gè)service,從而可以在后臺(tái)保持音樂(lè)的播放。同時(shí),系統(tǒng)也將保持這個(gè)service一直執(zhí)行,直到這個(gè)service運(yùn)行結(jié)束。另外,我們還可以通過(guò)使用Context.bindService()方法,連接到一個(gè)service上(如果這個(gè)service還沒(méi)有運(yùn)行將啟動(dòng)它)。當(dāng)連接到一個(gè)service之后,我們還可以service提供的接口與它進(jìn)行通訊。拿媒體播放器這個(gè)例子來(lái)說(shuō),我們還可以進(jìn)行暫停、重播等操作。4、ContentProviderAndroid系統(tǒng)應(yīng)用程序能夠?qū)⑺鼈兊臄?shù)據(jù)保存到文件中、SQL\t"/kf/201808/_blank"數(shù)據(jù)庫(kù)中,甚至是任何有效的設(shè)備中。當(dāng)你想將你的應(yīng)用數(shù)據(jù)與其它的應(yīng)用共享時(shí),ContentProvider將會(huì)很有用。一個(gè)ContentProvider類(lèi)實(shí)現(xiàn)了一組標(biāo)準(zhǔn)的方法,從而能夠讓其它的應(yīng)用保存或讀取此ContentProvider處理的各種數(shù)據(jù)類(lèi)型。Android開(kāi)發(fā)平臺(tái)的架構(gòu)模型,Google官方已經(jīng)用一個(gè)很簡(jiǎn)單的結(jié)構(gòu)圖清晰的進(jìn)行了說(shuō)明,簡(jiǎn)單來(lái)說(shuō)Android開(kāi)發(fā)平臺(tái)就是
\t"/kf/201808/_blank"Linux
+Google在其上自己開(kāi)發(fā)的\t"/kf/201808/_blank"Java\t"/kf/201808/_blank"虛擬機(jī)和運(yùn)行時(shí)+AndroidSDK構(gòu)成,這些內(nèi)容供我們了解就可以了。就開(kāi)發(fā)一個(gè)完整的Android應(yīng)用來(lái)說(shuō),我將對(duì)我們十分重要而Google官方文檔又說(shuō)的有些復(fù)雜的,關(guān)于一個(gè)完整的Android程序的靜態(tài)組成模型,和動(dòng)態(tài)運(yùn)行時(shí)模型,整理成了一張圖形如下,我們就從這張圖說(shuō)起:
先看的Activity,這個(gè)組件我們可以認(rèn)為它是Windows中的窗體概念,這是Android程序的基本組成部分,也就是程序的人機(jī)交互界面。比如一個(gè)簡(jiǎn)單的短信程序就應(yīng)該包含三個(gè)Activity,一個(gè)短信列表界面,一個(gè)\t"/kf/201808/_blank"閱讀短信詳細(xì)內(nèi)容的界面和一個(gè)編輯短信的界面。
先來(lái)看圖形中的灰色部分,這部分描述了一個(gè)完整的Android應(yīng)用程序可以包含的各個(gè)組成部分,我們將組成一個(gè)Android程序的組件稱(chēng)為AndroidComponent(圖中中間部分的基類(lèi)),由若干個(gè)AndroidComponent就組成了一個(gè)完整的Android應(yīng)用程序。圖中左上角的Service顧名思議就是服務(wù),一個(gè)Android程序中哪些部分是服務(wù)呢?舉例來(lái)說(shuō),短信程序并不只是在我們打開(kāi)短信界面的時(shí)候才去收取短信,我們退出界面后,手機(jī)仍然會(huì)去收取短信,并在新的短信到達(dá)時(shí)通知我們,所以一定有某個(gè)任務(wù)在后臺(tái)運(yùn)行著,這就是Service了;再比如說(shuō)音樂(lè)播放功能,當(dāng)我們從播放界面返回手機(jī)待機(jī)界面的時(shí)候仍然可以繼續(xù)聽(tīng)音樂(lè),這也是一個(gè)Service的例子。其實(shí)Activity+Service是非常常見(jiàn)的手機(jī)軟件應(yīng)用,比如我要做的BlogMessage同樣也是這樣的結(jié)構(gòu)。捕魚(yú)游戲左邊中間部分的“BroadcastReceiver”是用于接收各種系統(tǒng)定義事件或自定義事件的接收器,如果我們的程序想偵測(cè)一些系統(tǒng)事件的發(fā)生,我們就需要寫(xiě)一個(gè)BroadcastReceiver。例如我們的程序想在手機(jī)打開(kāi)Wifi的時(shí)候立即去刷新最新的數(shù)據(jù),或者我們想在手機(jī)來(lái)電時(shí)執(zhí)行某個(gè)動(dòng)作,這些都可以由BroadcastReceiver訂閱特定的事件來(lái)完成。圖中左邊剩下的“ContentProvider”,我們可以把它理解成一種特殊的Service,一種可以給其他程序提供數(shù)據(jù)的Service,例如手機(jī)中的聯(lián)系人信息,我們?nèi)魏纬绦蚨伎梢院推渫ㄐ湃カ@取聯(lián)系人的信息,這就可實(shí)現(xiàn)為一個(gè)典型的ContentProvider。
再來(lái)看圖中藍(lán)色的部分,這是一個(gè)靜態(tài)的部署概念,就如同我們.Net開(kāi)發(fā)的程序集的概念一樣。Apk是我們Android程序發(fā)布和部署的基本單位,一個(gè)完整的Android程序就可以打包為一個(gè)或多個(gè)Apk進(jìn)行發(fā)布,我們從AndroidMarketing上下載安裝的程序也是一個(gè)個(gè)的Apk包,我們?cè)贓clipse中的一個(gè)Project的最終Build結(jié)果也就是一個(gè)Apk文件。一個(gè)Apk中包含了上面介紹的4種AndroidComponent。
最后,圖中黃色的部分就是系統(tǒng)運(yùn)行時(shí)的概念了。由于Android平臺(tái)是基于Linux的,所以Process(進(jìn)程)和Thread(線程)的概念和Linux中的一致,在代碼中我們可以編寫(xiě)一個(gè)普通的JavaThread來(lái)實(shí)現(xiàn)多線程。需要注意的是,Android中的Process是受系統(tǒng)自動(dòng)管理的,并不是說(shuō)我們?cè)谝粋€(gè)程序界面中按了手機(jī)上的Back鍵或者Home鍵程序就結(jié)束了,大家也很難在Android的各種程序中找到類(lèi)似Symbian程序中的“退出”功能。Android系統(tǒng)會(huì)給每一個(gè)進(jìn)程都計(jì)算出一個(gè)“重要程度”等級(jí),在系統(tǒng)運(yùn)行的某個(gè)時(shí)候例如資源不足的時(shí)候,系統(tǒng)會(huì)根據(jù)各個(gè)進(jìn)程的“重要程度”來(lái)決定先釋放哪個(gè)進(jìn)程。(進(jìn)程“重要程度”的判斷在Google的官方文檔還是說(shuō)的比較清楚的,實(shí)際上各個(gè)AndroidComponent都有很完整的運(yùn)行時(shí)生命周期,由于我們不太清楚進(jìn)程結(jié)束的時(shí)機(jī),了解各個(gè)AndroidComponent的運(yùn)行時(shí)生命周期以及相關(guān)事件就對(duì)我們的開(kāi)發(fā)來(lái)說(shuō)非常重要,我會(huì)陸續(xù)在后續(xù)的手記中詳細(xì)闡述這些內(nèi)容)。一個(gè)Apk中包含的AndroidComponent在運(yùn)行時(shí)可以運(yùn)行在同一個(gè)進(jìn)程中,也可以運(yùn)行在不同的進(jìn)程中,這取決于我們?cè)贏pk的AndroidManifest.xml上進(jìn)行的配置(大家可以將這個(gè)AndroidManifest.xml看成是Apk的全局配制信息,其中會(huì)描述這個(gè)Apk中包含了哪些AndroidComponent以及各個(gè)Component的運(yùn)行和啟動(dòng)方式)。最后,圖中下面中間部分的“Task”是Android中一個(gè)很特殊的運(yùn)行時(shí)概念,也是很復(fù)雜的一個(gè)概念,Google的官方文檔用了很大的篇幅來(lái)說(shuō)明這個(gè)概念。它有別于進(jìn)程和線程,并且只和Activity的運(yùn)行時(shí)有關(guān)系。我們可以將其理解成“窗口棧”,這是由手機(jī)上的特殊操作方式所引出的概念。由于手機(jī)上的程序,用戶一般只能在同一時(shí)間看到一個(gè)界面,例如在編輯短信的時(shí)候一般就不能看到短信列表的界面。而一個(gè)完整的程序一般會(huì)由多個(gè)Activity組成,所以這些Activity會(huì)在運(yùn)行時(shí)隨著打開(kāi)的先后順序會(huì)被放到同一個(gè)窗口棧(Task)中,當(dāng)前活動(dòng)窗口棧中最上面的Activity就是用戶當(dāng)前看到的界面,按手機(jī)上的“Back”則是銷(xiāo)毀當(dāng)前棧頂?shù)腁ctivity,回到上一個(gè)界面。然而Task這個(gè)概念之所以復(fù)雜,是因?yàn)椴煌琍rocess中的Activity可以被放到同一個(gè)Task中,例如在我們的程序中可能會(huì)打開(kāi)GoogleMap的地圖界面。移動(dòng)電玩城具體Activity在運(yùn)行時(shí)該被放到哪個(gè)Task中,這會(huì)由Activity的taskAffinity屬性決定,一般情況下一個(gè)Apk中的所有Activity在運(yùn)行時(shí)會(huì)被放到同一個(gè)Task中,但是運(yùn)行時(shí)Activity的taskAffinity是可以修改的。例如上面說(shuō)的GoogleMap的例子,地圖顯示界面默認(rèn)是存在于GoogleMap這個(gè)程序的默認(rèn)Task中的,但是我們卻可以在運(yùn)行時(shí)將這個(gè)界面帶到我們自己程序的當(dāng)前Task中來(lái)。窗口在Task中的“入?!焙汀俺鰲!辈僮骱虯ctivity的運(yùn)行時(shí)生命周期息息相關(guān),后面我也會(huì)用更詳細(xì)的篇幅來(lái)介紹Task和Activity運(yùn)行時(shí)生命周期的關(guān)系。Android系統(tǒng)架構(gòu)和其操作系統(tǒng)一樣,采用了分層的架構(gòu)。Android分為四個(gè)層,從高層到低層分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行庫(kù)層和linux核心層。Android系統(tǒng)架構(gòu)之Linux內(nèi)核Android構(gòu)建在一個(gè)穩(wěn)定且得到廣泛認(rèn)可的基礎(chǔ)之上:Linux內(nèi)核。1991年,LinusTorvalds開(kāi)發(fā)了Linux內(nèi)核?,F(xiàn)在,Linux可以說(shuō)是無(wú)所不在,從手表到超級(jí)計(jì)算機(jī)中都能發(fā)現(xiàn)它的身影。Linux為Android提供了硬件抽象層,以便將來(lái)可以把Android移植到更多的平臺(tái)上。Android的核心系統(tǒng)服務(wù)依賴于Linux2.6內(nèi)核,如安全性,內(nèi)存管理,進(jìn)程管理,網(wǎng)絡(luò)協(xié)議棧和驅(qū)動(dòng)模型。Linux內(nèi)核也同時(shí)作為硬件和軟件棧之間的抽象層。開(kāi)發(fā)期間需要的某些實(shí)用程序要和Linux打交道。例如,adbshell命令將打開(kāi)一個(gè)Linuxshell,從中可以輸入要在設(shè)備上運(yùn)行的其他命令。例如,可以通過(guò)這個(gè)shell來(lái)檢查L(zhǎng)inux文件系統(tǒng)、查看活動(dòng)的進(jìn)程等,但有一定的安全限制。Android系統(tǒng)架構(gòu)之系統(tǒng)運(yùn)行庫(kù)Linux內(nèi)核層上面的一層中包含了Android的本機(jī)庫(kù)。這些共享庫(kù)都是用C或C++語(yǔ)言編寫(xiě)的,并且針對(duì)手機(jī)使用的特定硬件架構(gòu)進(jìn)行了編譯,并已由手機(jī)制造商預(yù)先安裝到手機(jī)中。1)程序庫(kù)Android包含一些C/C++庫(kù),這些庫(kù)能被Android系統(tǒng)中不同的組件使用。它們通過(guò)Android應(yīng)用程序框架為開(kāi)發(fā)者提供服務(wù)。以下是一些核心庫(kù):*系統(tǒng)C庫(kù)-一個(gè)從BSD繼承來(lái)的標(biāo)準(zhǔn)C系統(tǒng)函數(shù)庫(kù)(libc),它是專(zhuān)門(mén)為基于embeddedlinux的設(shè)備定制的。*媒體庫(kù)-基于PacketVideoOpenCORE;該庫(kù)支持多種常用的音頻、視頻格式回放和錄制,同時(shí)支持靜態(tài)圖像文件。編碼格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。*界面管理器(SurfaceManager)-對(duì)顯示子系統(tǒng)的管理,并且為多個(gè)應(yīng)用程序提供了2D和3D圖層的無(wú)縫融合。Android使用與Vista或Compiz類(lèi)似的組合窗口管理器,但是它要更簡(jiǎn)單一些。它并不是將顯示內(nèi)容直接繪制到屏幕緩沖區(qū)中,而是將繪制命令傳遞給屏幕外的位圖,然后將該位圖與其他位圖組合起來(lái),形成用戶看到的顯示內(nèi)容。這種方法允許系統(tǒng)實(shí)現(xiàn)所有有趣的效果,如透明的窗口和奇特的過(guò)渡效果。*LibWebCore-一個(gè)最新的web\t"/kf/201808/_blank"瀏覽器引擎用,支持Android瀏覽器和一個(gè)可嵌入的web視圖。*SGL-底層的2D圖形引擎*3Dlibraries-基于OpenGLES1.0APIs實(shí)現(xiàn);該庫(kù)可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。*FreeType-位圖(bitmap)和矢量(vector)字體顯示。*SQLite-一個(gè)對(duì)于所有應(yīng)用程序可用,功能強(qiáng)勁的輕型關(guān)系型數(shù)據(jù)庫(kù)引擎。2)Android運(yùn)行庫(kù)Android包括了一個(gè)核心庫(kù),該核心庫(kù)提供了JAVA\t"
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ī)用口罩市場(chǎng)增長(zhǎng)趨勢(shì)與競(jìng)爭(zhēng)格局行業(yè)報(bào)告
- 制造企業(yè)生產(chǎn)流程優(yōu)化總結(jié)
- 青少年理財(cái)教育辯論稿及總結(jié)全集
- 電動(dòng)車(chē)充電站運(yùn)營(yíng)安全指南
- 綠色建筑節(jié)能設(shè)計(jì)與實(shí)踐指南
- 2026年物流行業(yè)智慧物流創(chuàng)新報(bào)告
- 二年級(jí)語(yǔ)文詞語(yǔ)拼寫(xiě)與認(rèn)讀訓(xùn)練
- 二手奢侈品寄賣(mài)2025年五年監(jiān)管創(chuàng)新行業(yè)報(bào)告
- 供應(yīng)商合作協(xié)議范本及談判指南
- 礦山安全法規(guī)與模擬題解析
- 監(jiān)控運(yùn)維工作總結(jié)
- 材料供應(yīng)商與裝修公司合作協(xié)議模板
- 股權(quán)收購(gòu)協(xié)議(參考文本)
- 2025屆高考語(yǔ)文一輪復(fù)習(xí):二元思辨類(lèi)作文思辨關(guān)系高階思維
- 新人教版七年級(jí)上冊(cè)初中數(shù)學(xué)全冊(cè)教材習(xí)題課件
- 地下綜合管廊混凝土工程施工方案
- 2024-2025學(xué)年湖北省咸寧市高二生物學(xué)上冊(cè)期末達(dá)標(biāo)檢測(cè)試卷及答案
- 預(yù)制混凝土構(gòu)件質(zhì)量控制
- 2024高考英語(yǔ)應(yīng)用文寫(xiě)作真題手把手:2023全國(guó)乙卷素材
- 抵制網(wǎng)絡(luò)爛梗主題班會(huì)課件不盲目跟風(fēng)做自己的主人
- 企業(yè)盡職調(diào)查內(nèi)容提綱-中英文對(duì)照
評(píng)論
0/150
提交評(píng)論