




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Android-Universal-Image-Loader目標(biāo)2一、概述2介紹2功能介紹:31.3 能加載的類型:3二、使用使用流程:4錯(cuò)位問題:4自定義顯示效果:52.4 顯示樣式 displayer 說明:52.4加載:5三、自己實(shí)現(xiàn)ImageLoader63.1 代碼實(shí)現(xiàn):6四、源碼分析114.1 工程結(jié)構(gòu)114.2 架構(gòu)圖:134.3加載流程134.4 DisplayImage()函數(shù)流程:154.5 代碼: . 154.6 Task 專題:19五、其他細(xì)節(jié):205.1 UIL 默認(rèn)磁盤緩存目錄5.5緩存目錄以及文件名:20: . 21內(nèi)存緩
2、存策略:23磁盤緩存策略:255.6 journal 文件說明26六、常見面試題28七、總結(jié)297.1.使用流程2.加載流程29細(xì)節(jié)291目標(biāo)UIL 的用途UIL 的使用方法以及項(xiàng)目集成加載流程UIL代碼原理一、概述1.1 介紹加載庫 Android-Universal-Image-Loader 以下簡稱UIL。項(xiàng)目地址:/nostra13/Android-Universal-Image-LoaderAndroid Universal Image Loader 是一個(gè)強(qiáng)大的、可高度定制的加載庫,以下簡稱為UIL。簡單的說UIL 就做了一件事:獲取并顯示在相應(yīng)的 ImageVie
3、w 控件上。:21.2 功能介紹:多線程加載(同步、異步)定制加載配置項(xiàng)(線程池、器、器、內(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錯(cuò)位問題:加上顯示設(shè)置參數(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加載:實(shí)現(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、漸進(jìn).displayer(new RoundedBitmapDisplayer(8)/顯示樣式-圓角options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) /加載時(shí)顯示的占位圖.showImageForEmptyUri(R.drawable.ic_empty)/空 url 地址時(shí)顯示的.showImageOnFail(R.drawable.ic_error)/加載失敗時(shí)顯示的.cacheemory(true)/緩存到內(nèi)存,默認(rèn)為 false.cacheOnDisk(true)/緩存到磁
9、盤,默認(rèn)為 false/.displayer(new CircitmapDisplayer(Color.WHITE, 5)/顯示樣式-圓形/.displayer(new FadeInBitmapDisplayer(200)/顯示樣式-漸進(jìn).displayer(new RoundedBitmapDisplayer(8)/顯示樣式-圓角,默認(rèn)為 SimpitmapDisplayer.considerExifParams(true)/是否考慮加載 exif(數(shù)碼相機(jī)格式),默認(rèn)值為 false.bitmapConfig(Bitmap.Config.ARGB_8888)/位圖顯示質(zhì)量,默認(rèn)值為 ARG
10、B_8888/.resetViewBeforeLoading(true)/默認(rèn)為 false,加載前執(zhí)行 imageAware.setImageDrawable(null);.build();ImageLoader.getInstance().displayImage(url, holder.image, options);.showImageOnLoading(R.drawable.ic_stub) /加載時(shí)顯示的占位圖.build();三、自己實(shí)現(xiàn) ImageLoader3.1 代碼實(shí)現(xiàn):6/*Description: 封裝簡陋的加載器只是一個(gè)簡單地示例,很多細(xì)節(jié)沒處理,例如 task 的
11、等待隊(duì)列與任務(wù)取消,緩存大小超過限制時(shí)的邏輯,例如 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è)置為私有,外部實(shí)例化Overridepu
12、blic voidplete(String imageUri, View view, Bitmap loadedImage) /加載完成if (loadedImage != null) ImageView imageView = (ImageView) view;Display = !displayedImages.contains(imageUri);/只在第一次執(zhí)行漸進(jìn)動(dòng)畫 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è)置超時(shí)時(shí)間比較短利于測試,實(shí)際開發(fā)中使用默認(rèn)時(shí)間即可 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,實(shí)際開發(fā)中需要?jiǎng)討B(tài)計(jì)算opts.inS/error 級別的錯(cuò)誤,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/顯示錯(cuò)誤 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)建文件,擴(kuò)展名不建議以.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 進(jìn)行 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 進(jìn)制字符串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)換為弱(默認(rèn)情況下是強(qiáng))擴(kuò)展閱讀:Java:對象的強(qiáng)、軟、弱和虛/113473/53092/5.在 displayImage 方法里,先從內(nèi)存緩存里取6.如果內(nèi)存緩存沒有,則開啟一個(gè) task 從磁盤緩存里取7.在 LoadAndDisplayImageTask 的 run 方法里嘗試從磁盤里加載8.在 tryLoadBitmap 方法里先獲取文件,然后進(jìn)行操作,否則執(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 方法里進(jìn)行即到 bitmap 對象。1712.最
26、終,后得到的 bitmap 緩存到內(nèi)存里13.得到 bitmap 后需要交給 displayer 顯示,具體顯示成什么效果,有用戶設(shè)置的 displayer 決定,例如圓形、漸進(jìn)、圓角等。18DisplayBitmapTask displayBitmapTask = new DisplayBitmapTask(bmp, imageLoadingInfo, engine, loadedFrom);runTask(displayBitmapTask, syncLoading, handler, engine);4.6 Task 專題:在加載流程里的步驟 6 里,如果內(nèi)存緩存沒有,則開啟一個(gè) tas
27、k 從磁盤緩存里取每個(gè)Task 就是一個(gè)實(shí)現(xiàn)了Runnable 接口的類該 task 會可同步執(zhí)行或異步執(zhí)行異步執(zhí)行的是將其交給 Executor 執(zhí)行Executor 的默認(rèn)實(shí)現(xiàn)為一個(gè)阻塞隊(duì)列(初始化線程池大小為 3,優(yōu)先級為 Thread.NORM_PRIORITY - 2)19LoadAndDisplayImageTask displayTask = new LoadAndDisplayImageTask(engine, imageLoadingInfo, defineHandler(options);五、其他細(xì)節(jié):5.1 UIL 默認(rèn)磁盤緩存目錄5.2 緩存目錄以及文件名:mnt/sd
28、card/Android/data/包名目錄下的文件,當(dāng) apk 被卸載時(shí)會自動(dòng)被刪除,避免留存文件名自定義的好處是,可以避免文件名過長,避免特殊字符2.修改擴(kuò)展名的好處是,如果緩存的以 jpg 等擴(kuò)展名結(jié)尾,則用戶相冊里會看到,干擾用戶看圖。這樣用戶查看相冊時(shí),不會看到緩存的而手寫的 demo 沒修改擴(kuò)展名,會在相冊里展示,影響用戶體驗(yàn),如下圖:205.3:是非常的操作,很容易造成內(nèi)存溢出錯(cuò)誤,而且這個(gè)不是普通的異常,而是致命的錯(cuò)誤級別。所以 try catch 是沒用的,照樣。Bitmap bitmap = BitmapFactory.decodeStream();后占用內(nèi)存大小計(jì)算公式:
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.此時(shí)只有 alpha 值,沒有 RGB 值,
30、一個(gè)像素占用一個(gè)字節(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.一個(gè)像素占用 2 個(gè)字節(jié),alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占 4 個(gè)bites,共 16bites,即 2 個(gè)字節(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一個(gè)像素占用 4 個(gè)字節(jié),alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占 8 個(gè)bites,共 32bites,即 4 個(gè)字節(jié),這是一種高質(zhì)量的格式,電腦上普通采用的格式。
33、它也是Android上一個(gè) BitMap 的默認(rèn)格式。例如一張 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 的的時(shí)候,很容易造成內(nèi)存溢出,導(dǎo)致,但是一張大圖需要開辟的內(nèi)存空間一般 2M 左右,為什么也會呢,原因是 android 在位圖的時(shí)候,內(nèi)存會變得非常敏感,就算 app一張需要開辟的空間比較大,例如大于 2M
34、,則會拋出異總共可以使用的內(nèi)存常。下很多,只要解決方法:一張雖然很大,例如 1024x1024,但是需要展示他的 ImageView 控件通常大小都很小,例如 64x64,根本不需要成這么大的,所以采樣的時(shí)候,只需對進(jìn)行縮放采樣即可。例如只申請開辟64x64 大小對應(yīng)的內(nèi)存空間,用來保存縮放并后的。時(shí)設(shè)置采樣縮放比例當(dāng)然實(shí)際開發(fā)中這個(gè)縮放比例不是寫死的,而是動(dòng)態(tài)計(jì)算出來的。例如原始大小為 1024*768,而實(shí)際 ImageView 的寬高是 64*64,則縮放比例為 1024/64=1622Options opts = new Options();opts.inSleSize = 4;/采樣
35、大小為縮放原來的 1/4,實(shí)際項(xiàng)目中不會直接寫死,而是動(dòng)態(tài)計(jì)算。/error 級別的錯(cuò)誤,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.一個(gè)像素占用 2 個(gè)字節(jié),沒有alpha(A)值,即不支持透明和半透明,Red(R)值占 5 個(gè)bites ,Green(G)值占 6 個(gè) bites ,Blue(B)值占 5 個(gè) bites,共 16bites,即 2 個(gè)字節(jié).對于沒有透明和半透明顏色的來說,該格式的能夠達(dá)到比較的呈現(xiàn)效果,相對于 ARGB_8888 來說也能減少一半的內(nèi)存開銷。因此它是一個(gè)不錯(cuò)的選擇。另外通過 android.content.res.Resour來取得一個(gè)張時(shí),它也是以該格式來構(gòu)建 BitMa
38、p 的從 Android4.0 開始,該選項(xiàng)無效。即使設(shè)置為該值,系統(tǒng)任然會采用 ARGB_8888 來5.4 內(nèi)存緩存策略:默認(rèn)使用 LruMemoryCache 緩存策略,緩存大小為內(nèi)存等級的 1/8每部的單個(gè) app 能使用的內(nèi)存大小都是固定的,例如 16M、32M 等,可以調(diào)用系統(tǒng) api 獲取這個(gè)值。am.getMemoryClass();23/原始,即網(wǎng)絡(luò)上的,例如 1024x768 finalsrcWidth = srcSize.getWidth(); finalsrcHeight = srcSize.getHeight();/目標(biāo)顯示,即 ImageView 的大小,例如 64
39、x64finalWidth = maxBitmapSize.getWidth();finalHeight = maxBitmapSize.getHeight();/計(jì)算縮放比例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/計(jì)算最小縮放
40、尺寸public siccomputeMinImageSleSize(ImageSize srcSize) LruMemoryCache實(shí)現(xiàn)每次調(diào)用 put 方法緩存時(shí),會將新的 bitmap鏈表尾部,同時(shí)計(jì)算緩存大小是否已經(jīng)超過限制,如果超過則移除最頭部的節(jié)點(diǎn)值(即移除最少使用的)移除操作245.5磁盤緩存策略:如果用戶設(shè)置磁盤緩存大小,則使用 LruDiskCache,否則使用不限制大小的 UnlimitedDiskCache磁盤緩存機(jī)制每次做磁盤緩存操作的時(shí)候,journal 文件里。從 cache(即 LruDiskCache)里獲取編輯器 editor,將相關(guān)信息寫到cache.ed
41、it 方法實(shí)現(xiàn)255.6 journal 文件說明磁盤緩存日志文件 journal 路徑:journal 文件格式26:第 1 行是個(gè)固定的字符串“l(fā)ibcore.io.DiskLruCache”,表示使用的是 DiskLruCache 技術(shù)。第 2 行是DiskLruCache 的版本號,這個(gè)值目前固定為 1。第 3 行是應(yīng)用程序的版本號,在 open()方法中傳入,一旦應(yīng)用的版本號升級,journal 文件就會掉所有數(shù)據(jù)重新統(tǒng)計(jì)。第 4 行是 valueCount,這個(gè)值也是在 open()方法中傳入的,通常情況下都為 1。第 5 行是一個(gè)空行。前 5 行稱為 journal 文件的文件頭
42、。第 6 行是以一個(gè) DIRTY 前綴開始的,后面緊跟著緩存的 key。這意味著這是一條臟數(shù)據(jù)。每當(dāng)調(diào)用一次 DiskLruCache 的 edit()方法時(shí),都會向 journal 文件中寫入一條 DIRTY,表示正準(zhǔn)備寫入一條緩存數(shù)據(jù),但不知結(jié)果如何。然后調(diào)用 commit()方法表示寫入緩存成功,這時(shí)會向 journal 中寫入一條CLEAN,意味著這條“臟”數(shù)據(jù)被“洗干凈了”,調(diào)用 abort()方法表示寫入緩存失敗,這時(shí)會向 journal中寫入一條 REMOVE。也就是說,每一行 DIRTY 的 key,后面都應(yīng)該有一行對應(yīng)的CLEAN 或者REMOVE 的,否則這條數(shù)據(jù)就是“臟”
43、的,會被自動(dòng)刪除掉。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 的,這個(gè)表示每當(dāng)調(diào)用 get()方法去一條緩存數(shù)據(jù)時(shí),就
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度退股及員工持股計(jì)劃合同
- 個(gè)人股權(quán)轉(zhuǎn)讓合同2025年度含業(yè)績對賭條款
- 二零二五年度臨時(shí)項(xiàng)目經(jīng)理職務(wù)聘用與成果轉(zhuǎn)化合同
- 二零二五年度旅游團(tuán)隊(duì)保險(xiǎn)責(zé)任免除聲明
- 電線電纜購銷合同
- 管理層勞動(dòng)合同工資
- 個(gè)人數(shù)字資產(chǎn)管理協(xié)議
- 全新池塘出租協(xié)議
- 月餅產(chǎn)品代銷合同
- 鄉(xiāng)村旅游發(fā)展策略與實(shí)施方案
- 2025年中央一號文件高頻重點(diǎn)考試題庫150題(含答案解析)
- 接觸隔離標(biāo)準(zhǔn)操作流程
- 港股基礎(chǔ)知識
- 2025年溫州市甌海旅游投資集團(tuán)有限公司下屬子公司招聘筆試參考題庫附帶答案詳解
- 2025年天津三源電力集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 2025年上半年浙江嘉興桐鄉(xiāng)市水務(wù)集團(tuán)限公司招聘10人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年腹腔穿刺術(shù)課件 (1)2
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 物理試卷合集(含答案逐題解析)
- 2024年干式電力電容器項(xiàng)目可行性研究報(bào)告
- 河南12系列建筑設(shè)計(jì)圖集一(12YJ1)
- 2025年度智能倉儲管理系統(tǒng)軟件開發(fā)合同6篇
評論
0/150
提交評論