2012-06-19 126 views
2

什麼是自嘲startManagingCursor的原因是什麼?Android:棄用startManagingCursor的原因是什麼?

我簡單的應用程序具有從DB數據列表的表視圖。所以,我現在在的onCreate:

final Cursor cursor = getDataFromDB(); 
startManagingCursor(cursor); 
setListAdapter(new CursorAdapter(cursor)); 

和多數民衆贊成它,我不需要做別的......

但現在startManagingCursor已經過時了,我應該實現LoaderCallbacks,覆蓋onCreateLoader, onLoadFinished,onLoaderReset,爲我的數據庫創建ContentProvider等等。但我不需要所有這些員工,我只需要從DB獲取幾行信息。怎樣成爲 ?爲什麼android會這樣做?我爲什麼要實施所有這些員工?

+1

我想,你應該參考[Android的startManagingCursor已棄用](http://stackoverflow.com/questions/9771582/android-eclipse-startmanagingcursor-deprecated-but-want-to-support-older-api-ver )。 – Sajmon

回答

4

話雖這麼說,「過時」 Android中通常意味着「我們將繼續支持這一點,但我們認爲有更好的解決方案。」

如果你願意從FragmentActivity繼承,你可以使用Loader框架實現在Android支持包,要回了Android 1.6的所有道路。

您可以在API等級11+點題startManagingCursor()。然而,託管遊標存在的問題(尤其是在主應用程序線程上重新啓動活動時,它們會重新查詢())仍舊存在於較舊和較新的Android版本中。

來源:Android eclipse startManagingCursor Deprecated but want to support older API versions?

+0

-1哇,從另一個用戶的答案直接複製並粘貼*。至少引用來源。 – Ben

3

我想原因「爲什麼」這是過時的是,他們真正希望人們採取ContentProviders。這個就更明顯了,因爲它們是推動Loaders,和他們提供了一個CursorLoader只有具有ContentProvider S(個人認爲是嚴重命名應該叫做ContentLoader

工作,因爲startManagingCursor是在活動中,它使人們太容易對於人們來說(就像你在你的例子中所做的那樣),只需在UI線程上運行db查詢,導致暫停和有時ANR。

您可以編寫自己的CursorLoader,它可以與Cursors而不是ContentProviders一起使用,並使其成爲可重用類,以便您可以在不使用ContentProvider的情況下使用Loader框架。

我對這個解決方案是簡單地構建,使創建內容提供商一個相當瑣碎的操作,這樣我就可以充分利用現有的CursorLoader小框架。

相關問題