Dav*_*ter 40 android android-service android-fragments android-loadermanager
我有一个使用自定义Loader和Cursor设置的数据加载系统,它在Activities和Fragments中工作得很好但是在Service中没有LoaderManager(我可以找到).有谁知道为什么LoaderManager被排除在服务之外?如果没有办法解决这个问题?
Ste*_*yle 52
有谁知道为什么LoaderManager被排除在服务之外?
正如在另一个答案中所说,LoaderManager
明确设计来管理和Loaders
的生命周期.由于没有这些配置更改来处理,使用a 是没有必要的.Acivities
Fragments
Services
LoaderManager
如果没有办法解决这个问题?
是的,诀窍是您不需要使用a LoaderManager
,您可以Loader
直接使用它,它将处理异步加载数据并监视任何底层数据更改,这比手动查询数据要好得多.
首先,创建,注册并开始加载您Loader
的Service
创建时间.
@Override
public void onCreate() {
mCursorLoader = new CursorLoader(context, contentUri, projection, selection, selectionArgs, orderBy);
mCursorLoader.registerListener(LOADER_ID_NETWORK, this);
mCursorLoader.startLoading();
}
Run Code Online (Sandbox Code Playgroud)
接下来,实现OnLoadCompleteListener<Cursor>
您Service
的处理加载回调.
@Override
public void onLoadComplete(Loader<Cursor> loader, Cursor data) {
// Bind data to UI, etc
}
Run Code Online (Sandbox Code Playgroud)
最后,不要忘记Loader
在Service
被摧毁时清理你的.
@Override
public void onDestroy() {
// Stop the cursor loader
if (mCursorLoader != null) {
mCursorLoader.unregisterListener(this);
mCursorLoader.cancelLoad();
mCursorLoader.stopLoading();
}
}
Run Code Online (Sandbox Code Playgroud)
kwa*_*azi 18
很不幸的是,不行.加载器是为活动和片段设计的,以便干净地处理Activites和Fragments中发生的配置更改.即旋转设备并重新连接到现有数据.
服务没有任何配置更改,它将在后台进行,直到完成或系统被强制终止.因此,假设您在服务中的后台线程上执行代码(无论如何应该是这样),那么就没有理由使用Loader.只需拨打查询数据所需的电话即可.
因此,如果您的服务只是一个IntentService,您可以编写逻辑来在onHandleIntent()方法中查询光标支持的数据.
http://developer.android.com/guide/components/loaders.html
归档时间: |
|
查看次数: |
10356 次 |
最近记录: |