![android源碼分析圖片加載庫universal-image loader_第1頁](http://file4.renrendoc.com/view/c602aba963b1dad2f1bce11917e2dada/c602aba963b1dad2f1bce11917e2dada1.gif)
![android源碼分析圖片加載庫universal-image loader_第2頁](http://file4.renrendoc.com/view/c602aba963b1dad2f1bce11917e2dada/c602aba963b1dad2f1bce11917e2dada2.gif)
![android源碼分析圖片加載庫universal-image loader_第3頁](http://file4.renrendoc.com/view/c602aba963b1dad2f1bce11917e2dada/c602aba963b1dad2f1bce11917e2dada3.gif)
![android源碼分析圖片加載庫universal-image loader_第4頁](http://file4.renrendoc.com/view/c602aba963b1dad2f1bce11917e2dada/c602aba963b1dad2f1bce11917e2dada4.gif)
![android源碼分析圖片加載庫universal-image loader_第5頁](http://file4.renrendoc.com/view/c602aba963b1dad2f1bce11917e2dada/c602aba963b1dad2f1bce11917e2dada5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Android-Universal-Image-Loader目標(biāo)2一、概述2介紹2功能介紹:31.3 能加載的類型:3二、使用使用流程:4錯位問題:4自定義顯示效果:52.4 顯示樣式 displayer 說明:52.4加載:5三、自己實現(xiàn)ImageLoader63.1 代碼實現(xiàn):6四、源碼分析114.1 工程結(jié)構(gòu)114.2 架構(gòu)圖:134.3加載流程134.4 DisplayImage()函數(shù)流程:154.5 代碼: . 154.6 Task 專題:19五、其他細節(jié):205.1 UIL 默認磁盤緩存目錄5.5緩存目錄以及文件名:20: . 21內(nèi)存緩
2、存策略:23磁盤緩存策略:255.6 journal 文件說明26六、常見面試題28七、總結(jié)297.1.使用流程2.加載流程29細節(jié)291目標(biāo)UIL 的用途UIL 的使用方法以及項目集成加載流程UIL代碼原理一、概述1.1 介紹加載庫 Android-Universal-Image-Loader 以下簡稱UIL。項目地址:/nostra13/Android-Universal-Image-LoaderAndroid Universal Image Loader 是一個強大的、可高度定制的加載庫,以下簡稱為UIL。簡單的說UIL 就做了一件事:獲取并顯示在相應(yīng)的 ImageVie
3、w 控件上。:21.2 功能介紹:多線程加載(同步、異步)定制加載配置項(線程池、器、器、內(nèi)存緩存、磁盤緩存、顯示)1.3 能加載的類型:1. /image.png / 網(wǎng)絡(luò)加載2. file:/mnt/sdcard/image.png / 加載 SD 卡文件3. file:/mnt/sdcard/.mp4 / 加載 SD 卡里的預(yù)覽圖4. content:/media/external/images/media/13 / 加載 content provider 的5. content:/media/external/media/13 / content provider 里的預(yù)覽圖6. as
4、sets:/image.png / 加載 assets 里的資源7. drawable:/ + R.drawable.img / 加載本地 drawables 資源(非.9)3二、使用2.1 使用流程:1.文件里 添限2. 初始化 ImageLoader一般建議是在Application 里做初始化操作,也可以在 Activity 里初始化3.加載2.2錯位問題:加上顯示設(shè)置參數(shù),即加載時顯示占位圖即可。4/顯示設(shè)置options = new DisplayImageOptions.Builder()/displayImage(String uri對應(yīng)的 url 地址, ImageView i
5、mageView 需要展示的 ImageView) ImageLoader.getInstance().displayImage(url, imageView);/初始化配置參數(shù)ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(this); config.threriority(Thread.NORM_PRIORITY - 2);/優(yōu)先級 config.denyCacheImageMultipleSizesemory();/在內(nèi)存里緩存多種分辨率的 config.diskCacheFil
6、eNameGenerator(new Md5FileNameGenerator();/磁盤緩存是的文件名 config.diskCacheSize(50 * 1024 * 1024); / 50 MiB 磁盤緩存大小config.tasksProsingOrder(QueueProsingType.LIFO);/任務(wù)處理順序 config.writeDebugLogs(); / Remove for release app /輸出日志/初始化 ImageLoader ImageLoader.getInstance().init(config.build();展示2.3自定義顯示效果:2.4 顯
7、示樣式 displayer 說明:2.4加載:實現(xiàn)顯示效果,例如圓角+漸變5/加載器private sic class AnimateDisplayListener extends SimpleImageLoadingListener sic final List displayedImages = Collections.synchronizedList(newLinkedList();.displayer(new CircitmapDisplayer(Color.WHITE, 5)/顯示樣式-圓形.displayer(new FadeInBitmapDisplayer(200)/顯示樣式-
8、漸進.displayer(new RoundedBitmapDisplayer(8)/顯示樣式-圓角options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) /加載時顯示的占位圖.showImageForEmptyUri(R.drawable.ic_empty)/空 url 地址時顯示的.showImageOnFail(R.drawable.ic_error)/加載失敗時顯示的.cacheemory(true)/緩存到內(nèi)存,默認為 false.cacheOnDisk(true)/緩存到磁
9、盤,默認為 false/.displayer(new CircitmapDisplayer(Color.WHITE, 5)/顯示樣式-圓形/.displayer(new FadeInBitmapDisplayer(200)/顯示樣式-漸進.displayer(new RoundedBitmapDisplayer(8)/顯示樣式-圓角,默認為 SimpitmapDisplayer.considerExifParams(true)/是否考慮加載 exif(數(shù)碼相機格式),默認值為 false.bitmapConfig(Bitmap.Config.ARGB_8888)/位圖顯示質(zhì)量,默認值為 ARG
10、B_8888/.resetViewBeforeLoading(true)/默認為 false,加載前執(zhí)行 imageAware.setImageDrawable(null);.build();ImageLoader.getInstance().displayImage(url, holder.image, options);.showImageOnLoading(R.drawable.ic_stub) /加載時顯示的占位圖.build();三、自己實現(xiàn) ImageLoader3.1 代碼實現(xiàn):6/*Description: 封裝簡陋的加載器只是一個簡單地示例,很多細節(jié)沒處理,例如 task 的
11、等待隊列與任務(wù)取消,緩存大小超過限制時的邏輯,例如 LRU策略等。*author程序員 http/* date 2016-4-2 上午 12:06:54*/public class ImageLoader private sic final String TAG = ImageLoader;private sic ImageLoader mInstance = new ImageLoader();/內(nèi)存緩存public sic Map mCache = new HashMap();/線程池private sic Executor mPool;/構(gòu)造函數(shù)設(shè)置為私有,外部實例化Overridepu
12、blic voidplete(String imageUri, View view, Bitmap loadedImage) /加載完成if (loadedImage != null) ImageView imageView = (ImageView) view;Display = !displayedImages.contains(imageUri);/只在第一次執(zhí)行漸進動畫 if (Display) FadeInBitmapDisplayer.animate(imageView, 500); displayedImages.add(imageUri);/單例模式public sic Ima
13、geLoader getInstance()mPool = Executors.newFixedThrereturn mInstance;ool(5);/*顯示param url的 url 地址param imageview 需要展示*/的 imageview 控件public void displayImage(String url, ImageView imageview)LoadImageTask task = new LoadImageTask(url, imageview);/task.execute(); /單線程模式 task.executeOnExecutor(mPool);/
14、多線程模式/加載任務(wù)private class LoadImageTask extends Asyn private String mUrl;private ImageView mImageview;kpublic LoadImageTask(String url, ImageView imageView)mUrl = url;mImageview = imageView;Overrideprotected void onPreExecute() Log.d(TAG, onPreExecute(); super.onPreExecute();/加載之前設(shè)置占位圖(預(yù)覽圖)mImageview.
15、setImageResource(R.drawable.ic_stub);Overrideprotected Bitmap Log.d(TAG, nBackground(Void. params) nBackground(), url: + mUrl);/1.從內(nèi)存緩存里獲取 bitmap7private ImageLoader()Bitmap bitmap = mCache.get(mUrl);if (bitmap != null) Log.d(TAG, 內(nèi)存緩存里存在 bitmap); return bitmap;/2.從磁盤緩存里獲取 bitmapFile file = getFile(
16、mUrl);/獲取 url 對應(yīng)的文件if (file.exists() Log.d(TAG, 磁盤緩存里有文件,直接該文件);/從磁盤緩存里位圖,并緩存到內(nèi)存緩存里bitmap = decodeFile(file);return bitmap;/3.從網(wǎng)絡(luò)上加載Log.d(TAG, 沒有緩存,從網(wǎng)絡(luò)加載); try URL url = new URL(mUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();/設(shè)置超時時間比較短利于測試,實際開發(fā)中使用默認時間即可 conn.setConnectTimeou
17、t(5000);conn.setReadTimeout(5000);code = conn.getResponseCode();if (code = 200) Log.d(TAG, 獲取流: + mUrl); InputStream in = conn.getInputStream();/緩存到 SD 卡file = getFile(mUrl);FileOutputStream out = new FileOutputStream(file); writeStream(in, out);/從磁盤緩存里位圖,并緩存到內(nèi)存緩存里bitmap = decodeFile(file);return bi
18、tmap; catch (Exception e) e.prStackTrace();8/從磁盤緩存里位圖,并緩存到內(nèi)存緩存里private Bitmap decodeFile(File file) : + mUrl);Log.d(TAG, Options opts = new Options();leSize = 4;/采樣大小為縮放原來的 1/4,實際開發(fā)中需要動態(tài)計算opts.inS/error 級別的錯誤,try catch 沒用,照樣Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), opts);/緩存到內(nèi)存 mCache
19、.put(mUrl, bitmap);Log.d(TAG, 緩存 bitmap 到內(nèi)存緩存,當(dāng)前 size =+ mCache.size();return bitmap;Overrideprotected void ontExecute(Bitmap bmp) super.ontExecute(bmp);/展示if (bmp != null) mImageview.setImageBitmap(bmp);else/顯示錯誤 mImageview.setImageResource(R.drawable.ic_error);/保存private void writeStream(InputStre
20、am in, OutputStream out) byte buffer = new byte1024;len = -1;try while (len = in.read(buffer) != -1) out.write(buffer, 0, len); catch (Exception e) e.prStackTrace();finallyif (in != null) try 9return null;in.close(); catch (IOException e) e.prStackTrace();if (out != null) try in.close(); catch (IOEx
21、ception e) e.prStackTrace();/獲取 url 對應(yīng)的文件private File getFile(String url) /獲取 SD 卡根目錄File rootPath = Environment.getExternalStorageDirectory();/創(chuàng)建文件保存目錄File imagePath = new File(rootPath, heima); if (!imagePath.exists() imagePath.mkdirs();/生成文件名String fileName = generateFileName(url);/創(chuàng)建文件,擴展名不建議以.j
22、pg 之類的格式結(jié)尾,避免用戶在相冊里看到緩存的Log.d(TAG, fileName: + fileName);File file = new File(imagePath, fileName + .data); return file;/生成文件名public String generateFileName(String url) try /對 url 進行 md5 編碼MessageDigest md5 = MessageDigest.getInstance(MD5); byte digest = md5.digest(url.getBytes();/字節(jié)數(shù)組轉(zhuǎn)換成大數(shù)字Bigeger
23、i= new Bigeger(digest).abs();/轉(zhuǎn)換成 16 進制字符串10、源碼分析4.1 工程結(jié)構(gòu)1.模塊:11四 catch (NoSuchAlgorithmException e) e.prStackTrace();return null;String result = i.toString(16); return result;2.緩存模塊:3.工具類模塊:124.2 架構(gòu)圖:4.3加載流程英文:13中文:144.4 DisplayImage()函數(shù)流程:4.5 代碼:1.代碼2.會將 imageview成 ImageViewAware153.ImageViewAware
24、 的作用:4.將 view 轉(zhuǎn)換為弱(默認情況下是強)擴展閱讀:Java:對象的強、軟、弱和虛/113473/53092/5.在 displayImage 方法里,先從內(nèi)存緩存里取6.如果內(nèi)存緩存沒有,則開啟一個 task 從磁盤緩存里取7.在 LoadAndDisplayImageTask 的 run 方法里嘗試從磁盤里加載8.在 tryLoadBitmap 方法里先獲取文件,然后進行操作,否則執(zhí)行 tryCacheImageOnDisk 方法從網(wǎng)絡(luò)加載。16bmp = tryLoadBitmap();LoadAndDisplayImageTask displayTask = new Loa
25、dAndDisplayImageTask(engine, imageLoadingInfo, defineHandler(options);Bitmap bmp = configuration.memoryCache.get(memoryCacheKey);9.tryCacheImageOnDisk 方法里跳轉(zhuǎn)了很多方法,其為使用 HttpUrlConnection 請求網(wǎng)絡(luò)獲取流10.得到流后最終保存到磁盤緩存里11.tryCacheImageOnDisk 方法執(zhí)行完畢后,則對應(yīng)的已經(jīng)完畢,并且保存到磁盤里了,在下面的 decodeImage 方法里進行即到 bitmap 對象。1712.最
26、終,后得到的 bitmap 緩存到內(nèi)存里13.得到 bitmap 后需要交給 displayer 顯示,具體顯示成什么效果,有用戶設(shè)置的 displayer 決定,例如圓形、漸進、圓角等。18DisplayBitmapTask displayBitmapTask = new DisplayBitmapTask(bmp, imageLoadingInfo, engine, loadedFrom);runTask(displayBitmapTask, syncLoading, handler, engine);4.6 Task 專題:在加載流程里的步驟 6 里,如果內(nèi)存緩存沒有,則開啟一個 tas
27、k 從磁盤緩存里取每個Task 就是一個實現(xiàn)了Runnable 接口的類該 task 會可同步執(zhí)行或異步執(zhí)行異步執(zhí)行的是將其交給 Executor 執(zhí)行Executor 的默認實現(xiàn)為一個阻塞隊列(初始化線程池大小為 3,優(yōu)先級為 Thread.NORM_PRIORITY - 2)19LoadAndDisplayImageTask displayTask = new LoadAndDisplayImageTask(engine, imageLoadingInfo, defineHandler(options);五、其他細節(jié):5.1 UIL 默認磁盤緩存目錄5.2 緩存目錄以及文件名:mnt/sd
28、card/Android/data/包名目錄下的文件,當(dāng) apk 被卸載時會自動被刪除,避免留存文件名自定義的好處是,可以避免文件名過長,避免特殊字符2.修改擴展名的好處是,如果緩存的以 jpg 等擴展名結(jié)尾,則用戶相冊里會看到,干擾用戶看圖。這樣用戶查看相冊時,不會看到緩存的而手寫的 demo 沒修改擴展名,會在相冊里展示,影響用戶體驗,如下圖:205.3:是非常的操作,很容易造成內(nèi)存溢出錯誤,而且這個不是普通的異常,而是致命的錯誤級別。所以 try catch 是沒用的,照樣。Bitmap bitmap = BitmapFactory.decodeStream();后占用內(nèi)存大小計算公式:
29、一張(Bitmap)占用的內(nèi)存=長度*寬度*像素占用的字節(jié)數(shù)(質(zhì)量)質(zhì)量說明:21Bitmap.ConfigALPHA_8Each pixel is stored as a single translucency (alpha) channel.This is very useful to efficiently store masks for instance. No color information is stored. With this configuration, each pixel requires 1 byte of memory.此時只有 alpha 值,沒有 RGB 值,
30、一個像素占用一個字節(jié)Bitmap.ConfigARGB 44This field is deprecated. Because of the poor quality of this configuration, it is44advised to use ARGB 8888instead.這種格式的,看起來質(zhì)量太差,已經(jīng)不使用。Each pixel is stored on 2 bytes. The three RGB color channels and the alpha channel(translucency) are stored wi4 bits preci(16sible va
31、lues.) This configuration is mostly useful if the application needs to store translucency information but also needs to save memory. It ismended to use ARGB 8888 configuration.一個像素占用 2 個字節(jié),alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占 4 個bites,共 16bites,即 2 個字節(jié)Bitmap.ConfigARGB 88Each pixel is stored on 4
32、bytes. Each channel (RGB and alpha for translucency) is88stored with 8 bits of preci(256sible values.) This configuration is very flexible and offers the best quality. It should be used whenevossible一個像素占用 4 個字節(jié),alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占 8 個bites,共 32bites,即 4 個字節(jié),這是一種高質(zhì)量的格式,電腦上普通采用的格式。
33、它也是Android上一個 BitMap 的默認格式。例如一張 512x512 的需要申請開辟的內(nèi)存為 1M 左右(512 * 512 * 4 = 1048576 字節(jié)1048576 / (1024 * 1024) = 1M顯示質(zhì)量為 ARGB_8888),即原因:每一臺設(shè)備的 app 能使用的內(nèi)存大小是不一樣的,有些可以使用 16M,有些可以使用 32M,當(dāng)一張寬高大于 512x512 的的時候,很容易造成內(nèi)存溢出,導(dǎo)致,但是一張大圖需要開辟的內(nèi)存空間一般 2M 左右,為什么也會呢,原因是 android 在位圖的時候,內(nèi)存會變得非常敏感,就算 app一張需要開辟的空間比較大,例如大于 2M
34、,則會拋出異總共可以使用的內(nèi)存常。下很多,只要解決方法:一張雖然很大,例如 1024x1024,但是需要展示他的 ImageView 控件通常大小都很小,例如 64x64,根本不需要成這么大的,所以采樣的時候,只需對進行縮放采樣即可。例如只申請開辟64x64 大小對應(yīng)的內(nèi)存空間,用來保存縮放并后的。時設(shè)置采樣縮放比例當(dāng)然實際開發(fā)中這個縮放比例不是寫死的,而是動態(tài)計算出來的。例如原始大小為 1024*768,而實際 ImageView 的寬高是 64*64,則縮放比例為 1024/64=1622Options opts = new Options();opts.inSleSize = 4;/采樣
35、大小為縮放原來的 1/4,實際項目中不會直接寫死,而是動態(tài)計算。/error 級別的錯誤,try catch 沒用,照樣bitmap = BitmapFactory.decodeStream(in, null, opts);Bitmap.ConfigRGB_565Each pixel is stored on 2 bytes and only the RGB channels are encoded: red is stored with 5 bits of preci(32sible values), green is stored with 6 bits of preci(64sible
36、values) and blue is stored with 5 bits of preci. This configuration can produlight visual artifacts depending on the configuration of the source. For instance, without dithering, the result might show a greenish t. To get better results dithering should be appd. This configuration may be useful when
37、 using opaque bitmapst do not require high color fidelity.一個像素占用 2 個字節(jié),沒有alpha(A)值,即不支持透明和半透明,Red(R)值占 5 個bites ,Green(G)值占 6 個 bites ,Blue(B)值占 5 個 bites,共 16bites,即 2 個字節(jié).對于沒有透明和半透明顏色的來說,該格式的能夠達到比較的呈現(xiàn)效果,相對于 ARGB_8888 來說也能減少一半的內(nèi)存開銷。因此它是一個不錯的選擇。另外通過 android.content.res.Resour來取得一個張時,它也是以該格式來構(gòu)建 BitMa
38、p 的從 Android4.0 開始,該選項無效。即使設(shè)置為該值,系統(tǒng)任然會采用 ARGB_8888 來5.4 內(nèi)存緩存策略:默認使用 LruMemoryCache 緩存策略,緩存大小為內(nèi)存等級的 1/8每部的單個 app 能使用的內(nèi)存大小都是固定的,例如 16M、32M 等,可以調(diào)用系統(tǒng) api 獲取這個值。am.getMemoryClass();23/原始,即網(wǎng)絡(luò)上的,例如 1024x768 finalsrcWidth = srcSize.getWidth(); finalsrcHeight = srcSize.getHeight();/目標(biāo)顯示,即 ImageView 的大小,例如 64
39、x64finalWidth = maxBitmapSize.getWidth();finalHeight = maxBitmapSize.getHeight();/計算縮放比例finalwidthScale = () Math.ceil(float) srcWidth /Width); finalheightScale = () Math.ceil(float) srcHeight /Height);/取大的值,例如 1204/64=16,768/64=12,最終使用的縮放比例是 16 return Math.max(widthScale, heightScale); / max/計算最小縮放
40、尺寸public siccomputeMinImageSleSize(ImageSize srcSize) LruMemoryCache實現(xiàn)每次調(diào)用 put 方法緩存時,會將新的 bitmap鏈表尾部,同時計算緩存大小是否已經(jīng)超過限制,如果超過則移除最頭部的節(jié)點值(即移除最少使用的)移除操作245.5磁盤緩存策略:如果用戶設(shè)置磁盤緩存大小,則使用 LruDiskCache,否則使用不限制大小的 UnlimitedDiskCache磁盤緩存機制每次做磁盤緩存操作的時候,journal 文件里。從 cache(即 LruDiskCache)里獲取編輯器 editor,將相關(guān)信息寫到cache.ed
41、it 方法實現(xiàn)255.6 journal 文件說明磁盤緩存日志文件 journal 路徑:journal 文件格式26:第 1 行是個固定的字符串“l(fā)ibcore.io.DiskLruCache”,表示使用的是 DiskLruCache 技術(shù)。第 2 行是DiskLruCache 的版本號,這個值目前固定為 1。第 3 行是應(yīng)用程序的版本號,在 open()方法中傳入,一旦應(yīng)用的版本號升級,journal 文件就會掉所有數(shù)據(jù)重新統(tǒng)計。第 4 行是 valueCount,這個值也是在 open()方法中傳入的,通常情況下都為 1。第 5 行是一個空行。前 5 行稱為 journal 文件的文件頭
42、。第 6 行是以一個 DIRTY 前綴開始的,后面緊跟著緩存的 key。這意味著這是一條臟數(shù)據(jù)。每當(dāng)調(diào)用一次 DiskLruCache 的 edit()方法時,都會向 journal 文件中寫入一條 DIRTY,表示正準(zhǔn)備寫入一條緩存數(shù)據(jù),但不知結(jié)果如何。然后調(diào)用 commit()方法表示寫入緩存成功,這時會向 journal 中寫入一條CLEAN,意味著這條“臟”數(shù)據(jù)被“洗干凈了”,調(diào)用 abort()方法表示寫入緩存失敗,這時會向 journal中寫入一條 REMOVE。也就是說,每一行 DIRTY 的 key,后面都應(yīng)該有一行對應(yīng)的CLEAN 或者REMOVE 的,否則這條數(shù)據(jù)就是“臟”
43、的,會被自動刪除掉。27/構(gòu)造方法public sic DiskLruCache open(File directory,appVer,valueCount, long maxSize, maxFileCount)后面的數(shù)據(jù),除了CLEAN 前綴和 key 之外,尾部還會有一串?dāng)?shù)字,例如 437346,這表示該文件的大小,DiskLruCache 會在每一行 CLEAN的最后加上該條緩存數(shù)據(jù)的大小,以字節(jié)為。DiskLruCache 的size()方法可以獲取到當(dāng)前緩存路徑下所有緩存數(shù)據(jù)的總字節(jié)數(shù),工作原理是把journal文件中所有 CLEAN的字節(jié)數(shù)相加,求出的總合再把它返回。除了DIRTY、CLEAN、REMOVE 之外,還有一種前綴是 READ 的,這個表示每當(dāng)調(diào)用 get()方法去一條緩存數(shù)據(jù)時,就
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 14《故都的秋》《荷塘月色》對比閱讀說課稿 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊
- 8《網(wǎng)絡(luò)新世界》(說課稿)-部編版道德與法治四年級上冊001
- 9《這些是大家的》說課稿-2023-2024學(xué)年道德與法治二年級上冊統(tǒng)編版
- Unit 1 Back to School Reading 說課稿-2024-2025學(xué)年高一英語譯林版(2020)必修第一冊
- 2024-2025學(xué)年高中歷史 第四單元 工業(yè)文明沖擊下的改革 第15課 戊戌變法(2)教學(xué)說課稿 岳麓版選修1
- 2025市場門市部租賃合同
- 2025電腦維修合同范本
- 2024-2025學(xué)年新教材高中語文 第六單元 10.1 勸學(xué)說課稿(3)部編版必修上冊
- 2025蘋果購銷合同樣書
- 24 京劇趣談(說課稿)-2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 2025屆上海交大南洋中學(xué)語文高三第一學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測試題含解析
- 環(huán)保局社會管理創(chuàng)新方案策劃方案
- 主題二任務(wù)二 《探究身邊信息技術(shù)的奧秘》 教學(xué)設(shè)計 2023-2024學(xué)年桂科版初中信息技術(shù)七年級上冊
- 人教八年級上冊英語第一單元《Section A (1a-2d)》教學(xué)課件
- 2023年版《安寧療護實踐指南(試行)》解讀課件
- 10kV環(huán)網(wǎng)柜改造工程施工方案設(shè)計
- 電工班三級安全教育內(nèi)容范本
- 中國血管通路專家共識解讀
- 新生兒疾病篩查可疑陽性、陽性兒復(fù)查隨訪登記表
- 開學(xué)前幼兒園安全培訓(xùn)
- 2023年湛江市麻章區(qū)教育局招聘事業(yè)編制教師考試真題
評論
0/150
提交評論