android在異步任務中如何關閉Cursor


  在我們開發應用的時候,很多時候會遇到這種問題。

  查詢數據會比較耗時,所以我們想把查詢數據放在一個異步任務中,查詢結果獲得Cursor,然后在onPostExecute (Cursor result)方法中設置Adapter,我們可能會想到使用Activity的managedQuery來生成Cursor,這樣Cursor就會與Acitivity的生命周期一致了,多么完美的解決方法!然而事實上managedQuery也有很大的局限性,managedQuery生成的Cursor必須確保不會被替換,因為可能很多程序事實上查詢條件都是不確定的,因此我們經常會用新查詢的Cursor來替換掉原先的Cursor。因此這種方法適用范圍也是很小。

  我們不能直接將Cursor關閉掉,但是注意,CursorAdapter在Acivity結束時並沒有自動的將Cursor關閉掉,因此,你需要在onDestroy函數中,手動關閉。

  

@Override
	protected void onDestroy() {
		super.onDestroy();
		mPhotoLoader.stop();
		if(mAdapter != null && mAdapter.getCursor() != null) {
		    mAdapter.getCursor().close();
		}
	}

 

  如果沒有在Adapter中用到Cursor,可以手動關閉Cursor。

  

 1 Cursor cursor = null;
 2 try{
 3     cursor = mContext.getContentResolver().query(uri,null,null,null,null);
 4     if(cursor != null){
 5         cursor.moveToFirst();
 6     //do something
 7     }
 8 }catch(Exception e){
 9     e.printStatckTrace();
10 }finally{
11     if(cursor != null){
12         cursor.close();
13     }
14 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM