異常:
1. new file(string path)
這個path不能為空,否則空指標
2. listview資料更新導致的陣列越界異常arrayoutofbound
listview通常會對應乙個資料集,一般用list儲存。
listview重新整理時,首先呼叫adapter的getcount(), getcount通常返回資料集中資料的個數。
假設getcount()返回n,
則接著呼叫 n 次 adapter的getview()方法。
而getview通常會訪問資料集指定位置的資料。
當資料集不變時,沒有問題。
一旦資料集發生變化,確切的說,資料減少時,
例如減少1個,那麼訪問資料集list第n-1位置是,就發生資料越界。
發生異常的場景:
支援刪除資料的listview。
解決方案:
1. getview中訪問資料前,檢查是否陣列越界。
或者2. 刪除資料時,確保介面沒有同時重新整理。這個在介面設計上有點複雜。
3. 遍歷集合同時修改集合導致的concurrentmodificationexception
錯誤的**如下,以map為例。這裡remove或者put都會導致該異常。
比較坑的是,三星手機會出現該異常,但是會被系統吃掉,**直接終止,應用程序不會終止,介面不會有任何提示。
小公尺等不會報該異常,一切正常。
正確的**如下:
非異常
1. dialog建構函式的cancellistener的***可以為null。
預設行為就是dismiss。
這個沒有官方檔案規定,
通過看源**發現,並已實踐驗證。
風險:後續版本的android原始碼會不會crash,無法保證。
備忘錄模式
備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...
備忘錄模式
先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...
備忘錄模式
面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...