Cursor 綁定 ListView(透過 CursorAdapter)。Handler 通知 UI 換新 Cursor + notifyDataSetChanged()。getView() → cursor.moveToPosition(190),但舊 CursorWindow 僅剩 180 列 → CursorWindowAllocationException。Cursor 及其底層 CursorWindow 是**資料快照**,不會自動同步資料庫變更。刪除資料後舊 Cursor 仍指向舊快照,位置索引失效。
List 或自定 Bean List,Cursor 用完即關閉。notifyDataSetChanged(),**完全繞過 Cursor 併發問題**。requery() 或重新 query() 取得新 Cursor,透過 Handler 傳給 UI 執行緒 swapCursor(newCursor)。CursorLoader 自動監測資料變更(需 ContentResolver.notifyChange(uri)),框架層處理 Cursor 更換,最標準但引入較重架構。**不要在跨執行緒共享 Cursor 且同時修改資料庫**。資料複製到不變集合是最輕量穩健的方案。