編輯:關於Android編程
Andriod應用的堆棧大小在T-Mobile G1上被限制在16MB,對於一個手機這已經是很大的內存了,但對一些開發者來說還是不夠。即使你不需要使用這麼多的內存空間,你也應該盡可能地節省使用,這樣就不至於在其他應用運行的時候將你的殺掉。Android可以在內存中緩存的應用越多,應用間的切換也就越流暢。作為我的一部分工作,我深入了解了Android應用內存洩漏問題,發現大多數都是同一類情況——長時間保持對一個Context的引用(keep a long_lived reference to a Context)。
在Android裡,許多操作都需要使用Context,但絕大部分情況是獲取、加載資源,這也是所有的控件需要在構造函數裡接收一個Context參數的原因。一般情況下,我們可以獲取兩種Context,Activity和Application,開發者通常會將第一個也就是Activity作為參數進行傳遞。
@Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText(Leaks are bad); setContentView(label); }
當屏幕方向改變時系統會默認destroy當前的activity,保存當前狀態並創建一個新的activity,也就是Android會重新從資源文件中加載應用的視圖。想象一下你的應用裡有一幅大圖,但並不像每次旋轉屏幕都重新去加載,將它緩存在內存裡最簡單的辦法是將它聲明為static類型:
private static Drawable sBackground; @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText(Leaks are bad); if (sBackground == null) { sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground); setContentView(label); }
這個例子是Context洩漏裡最簡單的一種情況,你可以在HomeScreen的源碼裡看我們是怎麼通過把drawable的callback設置為null來解決這個問題的(搜索unbindDrawables()方法),有趣的是,有時會創建出一條洩漏context的調用鏈,這樣會使你的內存更快的耗盡。
在使用Bitmap(位圖)中,我們總是會與BitmapFactory類打交道。今天就來看看BitmapFactory的廬山真面目。首先依舊是看看官網的定義:Creates
紅米Pro今天發布了,紅米Pro有三個版本標准版、高配版和尊享版。紅米Pro三款機型的售價分別是1499元、1699元和1999元,8月6日開放購買。那這三
數據存儲在開發中是使用最頻繁的,在這裡主要介紹Android平台中實現數據存儲的5種方式,更加系統詳細的介紹了5種存儲的方法和異同。 第一種: 使用SharedPre
那裡是把用戶名和密碼保存到了內存中,這一篇把用戶名和密碼保存至SharedPreferences文件。為了引起誤導,聲明實際開發中不會用到這兩種方式,這裡指示提供一種思路
status_t AudioSystem::setStreamVolum