Category Archives: Android
Volley: Google 自家制 Android Network Library – ImageLoader
上回: Google I/O 2013 (1) – Volley: Google 自家制 Android Network Library
初試試Google 的Volley Library , 發現是比從前簡單了一點兒,由於沒有任何的Document,只有上網找找人家的案例再從錯誤中學習一下。今次講一講ImageLoader ,從前但部份也是用github上某個大大的Library 吧,今次試試使用volley實作。
首先,Volley 已經有很完善的Http Request 的流程,也有一推Caching Helper。
要做一個類ImageLoader Library ,Volley內已經有以下元件:
- ImageLoader ( com.android.volley.toolbox.ImageLoader)
- RequestQueue
- ImageCache
實戰過程中,沒有像Youtube Google 神使用得那麼簡單。Youtube 內有BitmapLruCache,但是原來它的tool內沒有包括在內,需要用家親自處理。ImageLoader 內需要的是一個RequestQueue 處理Request ,及一個ImageCache。
/**
* Constructs a new ImageLoader.
* @param queue The RequestQueue to use for making image requests.
* @param imageCache The cache to use as an L1 cache.
*/
public ImageLoader(RequestQueue queue, ImageCache imageCache) {
mRequestQueue = queue;
mCache = imageCache;
}
本人做了一個類BitmapLruCache的Class
/***
* Helper Class for Volley ImageLoader Bitmap ImageCache, since it need LruCache
* Memory Cache Class
* @author 阿目
*
*/
class VolleyBitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
public VolleyBitmapLruCache(Context context) {
this(context , getDefaultLruCacheSize());
}
public VolleyBitmapLruCache(Context context , int sizeInKiloBytes) {
super(sizeInKiloBytes);
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
另外為了方便自己使用整個流程,也起了一個Class 為VolleyImageLoaderHelper,如下:
/***
* VolleyImageLoaderHelper Class for Volley ImageLoader
* Memory Cache Class
* @author 阿目
*
*/
public class VolleyImageLoaderHelper {
// ImageLoader From Volley
private static ImageLoader sImageLoader;
/**
*
* @return Volley ImageLoader
*/
public static ImageLoader get() {
return sImageLoader;
}
public static void initImageLoader(Context context) {
if (sImageLoader != null) {
return;
}
sImageLoader = new ImageLoader(
Volley.newRequestQueue(context), // Volley Request
new VolleyBitmapLruCache(context) // Volley BitmapLruCacheHepler
);
}
}
第一次使用時,在e.g. MainActivity 下啟動VolleyImageLoaderHelper
VolleyImageLoaderHelper.initImageLoader(getApplicationContext()); // init VolleyImageLoaderHelper
VolleyImageLoaderHelper.get().get(url, new ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
img.setImageResource(R.drawable.ic_launcher);
}
@Override
public void onResponse(final ImageContainer response, boolean isImmediate) {
// response.getBitmap(); // 這個就是最後得來的Bitmap
}
}
這使得成個流程也非常簡單。
以下是 上面的簡單例子:github.com/extralam/VolleyImageHelper
*有沒有發現像流了一點東西呢?其實這個實作不是完全品,這個helper 是沒有做fileCache ,在Volley 內有DiskBasedCache可以幫助你完成這工作。
除此以外,Volley Library 已經有一個NetworkImageView 的widget 幫手處理Image 。
Google I/O 2013 (1) – Volley: Google 自家制 Android Network Library
前言
每一年既 Google I/O 都有好多好精彩既 Presentation。今年當然不會例外,除左現場網上直播的環節,其他同時間進行的環節已經上載到 GoogleDevelopers 的 Youtube Channel。有興趣可以到Youtube 或 Google I/O 2013 的主頁觀看,而筆者也會在這裏不定期分享一下本人有興趣的題目,也歡迎大家投稿分享。
Volley: Easy, Fast Networking for Android
講到 Android Network library,Java本身已經有Apache HttpClient、HttpURLConnection。咁點解Android 要做Volley?根據片中所講,因為以上方法有幾個問題:
- 網絡請求(Network Request) 是序列進行。(假設沒有用到Async Task)
- 當你旋轉屏幕時所有東西要重新從網絡載入一次,所以要自己處理緩存(cache)的問題
- 當View重用的時候,AsyncTasks會重疊 (AsyncTask stomp on recycled views)
- HttpURLConnection 在 Froyo 或以前的版本有兼容性間題
Google 推出Volley這個框架(framework),只要用很少的程式碼就可以處理到網絡請求,並解決以上的問題!在筆者看來,Volley 的功能就似Android 版的 ASIHTTPRequest (ASIHTTPRequest 是Objective-C 上知名的專門用來處理HTTP requests 的框架)。
Volley 有以下幾個特點:
- 使用漂亮和簡單的API來執行REST請求
- 將底層抽象化(abstracting)來統一REST請求機制 (也就是說,你不關心任何更多關於HttpClient的或HttpURLConnection類。在較低版本(GINGERBREAD)Volley使用AndroidHttpClient並沒有更高的使用HttpURLConnection類)
- 非常快!根據片中所講,他們測試了Volley在Google與幾個不同的應用程序,Volley在當中是明顯的勝出
- 可擴展!你可以用它為基礎創建自己的自定義類型的請求(以及回應處理/解析)
有興趣可以到以下地方下載:
Android Fragment 問題
Android 有一種新的開發模式是用Fragment, 但筆者我常常發現當用家按Home 鍵後,長時間後回來App就發會有null point Exception 問題。
這是因為os本身為你解放咗一些memory 問題。
解決方方是當使用者按Home 後,先保存Fragment 到Bundle 那裡去
以下是簡單的例子。
Fragment mContent;
智能手機軟件市場大戰
就智能系統市場佔有率而言,安桌無疑是首位,其次是蘋果iOS系統,之後才到BB / WINDOWS PHONE。
當然談論系統上的程式數量,當然也是安桌市場完勝,主要原因是沒有檢查便可以快速上架了。
但論程式質素,無疑iOS 的系統,單單送批也要兩個星期才可以上架,可見蘋果公司是多重視用家的體驗。
另一個原因,很可能開發iOS程式比其他系統更容易,容易在於手機只是幾款,但是安桌則上萬款,開發iOS 得到一個保證。
還有的是整個生態系統更完善,更多人使用正版軟件,令開發者更有利可圖,更願意付出並做得更好。
下圖是在兩個市場上購買正版軟件的比例。可以看出整體表現也是iOS 完勝 Android。
亞馬遜Amazon推平板
今天,華爾街日報報導,亞馬遜計劃十月推出基於 Android的平板。
在消息顯示,亞馬遜他們的第一款Android平板將有9英寸的屏幕(相當於 iPad的9.7英寸的),將運行一個未指定的版本的Android,不會有一個攝像頭,不會是亞馬遜的設計,他們將設計和製造外包了 一間亞洲公司。原因?可能是因為他們希望盡快完成。
華爾街日報還報導,亞馬遜正在開發另一種版本,他們正在設計自己的,但不會準備到明年。
這表示第一個版本已價格為首。
畢竟現在不是賣硬件,而是得到一個長遠的利錢計劃。
(消息來源:TechChurch、Sina、WSJ,圖片來源:cellphonequick、TechChurch)
全新的Android Market安桌市場
Google 已經宣布,將會推出全新的Android Market (安桌市場) 在 Android手機上。
隨著整體重新設計,新的Android Market 將增加書籍和電影標籤。
更新的市場可用於手機運行 Android2.2及以上,並會推出在未來幾週內。
(會增加電影和書籍,只限美國)
文章來自: 9to5google
HTC 宏達電 – HTC與筆者
是這樣的,早幾天看到了有關HTC的廣告(加入HTC, 在國際舞台實現非凡成就)。
看完的第一個感覺係,嘩!好有國際大企業的感覺 (有一種Apple Feel)。
所以說寫一篇有關HTC 宏逹電的文章。(有不對的請指證一下)
HTC 宏達電 – HTC與筆者
首先說一說筆者, Read the rest of this entry
新一代手機Google+apple=gooapple!?
近日網上開始流傳了Google + Apple 二代手機,功能外型介面等可以說是接近完美!
之前發布過採用了高仿iPhone 4機身google 手機(生果報好像有賣),安裝 Android的2.2.1版系統,定價 999元人民幣,不過遺憾的是,系統界面仍為 Android的原生界面。
又一部型仔日本Android智能電話
找不到一部合心意的Android 手提電話?找不到一部日本型仔手機?找不到一部翻蓋手機?
不要緊,日本Sharp 公司正式公布一款全新Android 手提電話,
保存日本式風格,並配備千六萬像素相機和3D顯示功能,model 係007Sh。
至於價格未知~ =,= (唔知就唔好up 啦) Read the rest of this entry
祖國 Google TV !!!
還記得Google I/O 2011 上, 官方表示會推出Android3.1 給Google TV。估不到,轉過頭祖國已經為你預備好GoogleTV。
網絡電視其實不是什麼新鮮的事,早幾年前,Apple 推出apple TV 不是沒有太多人關注,我指亞洲區,主要原因是apple的線上買賣問題,apple TV主要賣出地點始終在歐美市場。 Read the rest of this entry