我正在從URL加載圖像到我的應用程序。圖像尺寸很大(約1.5Mb)。我如何使用許多線程(例如:2個線程)來加載此圖像以提高速度?如果使用一個線程來加載這個圖像,它需要我5秒左右,我想減少這個持續時間。從多個線程加載一個URL的圖像
回答
你是對的。 1.5Mb是一個很大的圖像,優化的方式不是使用很多線程。雖然你在正確的軌道上。該技術被稱爲「切片」,並在Web上大量使用以更快地加載圖像。因此,拍攝一張圖片並將其分成3或4張較小的圖片(而不是更多)。渲染時一次調用這4個圖像。它的加載速度比一張大圖更快。這也減輕了最終用戶的「感知」延遲。此外,當您切片圖像時,可以更輕鬆地減少顯示該圖像部分所需的顏色數量,從而減少文件大小(有時非常顯着)。
作爲Google在其主要搜索頁面中用於實現其主徽標的示例。請參閱4分割我們的徽標圖片?
切片的缺點是,它增加了維護成本。有些人必須保持這些圖像分割,並確保應用程序不斷變化,沒有任何不妥之處。
所以解決方案取決於服務器,我必須要求他們做到這一點。謝謝 – lenhhoxung
是的解決方案是更多的服務器綁定。你可以嘗試在客戶端做到這一點,但它是沒有用的,你幾乎沒有任何性能增益。 –
請嘗試以下代碼:
//in .h file declare the following objects:
IBOutlet UIImageView *imgTest;
-(IBAction)buttonTapped:(id)sender;
-(void)LoadImage:(NSString *) irlString;
-(void)setImage:(NSData *) imgData;
//in .m file write the following code:
-(IBAction)buttonTapped:(id)sender
{
[self performSelectorOnMainThread:@selector(LoadImage:) withObject:@"http://www.google.com/images/errors/logo_sm.gif" waitUntilDone:NO];
}
-(void)LoadImage:(NSString *) urlString
{
NSURL *imgURL=[NSURL URLWithString:urlString];
NSData *imgData=[NSData dataWithContentsOfURL:imgURL];
[self performSelectorInBackground:@selector(setImage:) withObject:imgData];
}
-(void)setImage:(NSData *) imgData;
{
imgTest.image=[UIImage imageWithData:imgData];
}
您可以使用活動的指標加載圖像時也是如此。在buttonTapped方法中啓動它,並在setImage方法中停止它。
我希望這會幫助你。
我不認爲這可以幫助,因爲我已經使用另一個線程來下載圖像(大數據)。 – lenhhoxung
- 1. 加載一個Live WallPaper的URL圖像
- 2. AS3加載程序() - 使用一個加載程序加載多個圖像
- 3. 多個圖像加載在另一個
- 4. jqgrid從多個URL加載
- 5. 如何從線程中的直接URL加載GridView圖像
- 6. 從一個類的URL中加載圖像
- 7. UICollectionViewController多線程圖像加載
- 8. Tensorflow多線程圖像加載
- 9. 加載多個圖像
- 10. OpenCV:加載多個圖像
- 11. 加載多個圖像
- 12. 設置圖像從一個URL的圖像框與下載
- 13. 多個圖像加載器一頁
- 14. php從多個來源加載第一個圖像
- 15. 從URL加載.svg圖像
- 16. 圖像不從URL加載
- 17. ImageSwitcher從url加載圖像
- 18. Android從URL加載圖像
- 19. 在加載中加載多個圖像
- 20. 將兩個圖像從url加載到圖像查看
- 21. 從線程URL加載圖像,以及如何取消dealloc線程
- 22. 加載另一個圖像
- 23. 如何加載一張帶有多個圖像的圖像?
- 24. 線程多次加入()一個線程
- 25. Java線程從同一目錄加載多個文件
- 26. 將一個圖像加載到一個小程序中的JPanel
- 27. 加載多個圖像attachecd一個縮略圖
- 28. Python線程化,加載一個接一個線程
- 29. 一旦加載多個圖像就加載
- 30. 從另一個線程加載數據,線程安全嗎?
我不認爲使用多線程將有助於加速下載單個資源 - 瓶頸最有可能是設備可用的帶寬。 – alxmitch
您需要一個服務器端腳本來將圖像分成塊並按需發送每個塊,並且您的客戶端代碼需要下載兩個(或更多)單獨的塊,當它包含所有這些塊時,重新組合它進入原始圖像。這不是一個簡單的任務。 – 2013-07-19 02:59:59
對我來說似乎很難,因爲我沒有訪問服務器的權限。如果客戶可以承擔責任,那麼它會很好 – lenhhoxung