顾名思义就是加载器,简单来说,Loader做了2件事: (1)在单独的线程中读取数据,不会阻塞UI线程 (2)监视数据的更新 LoaderManager是什么,有什么作用?...LoaderManager就是加载器的管理器,一个LoaderManager可以管理一个或多个Loader,一个Activity或者Fragment只能有一个LoadManager。...LoaderManager管理Loader的初始化,重启和销毁操作。...R.id.music_name, R.id.music_singer }, 0); listView.setAdapter(mAdapter); // 通过异步的方式加载数据 LoaderManager
之前实现过Android开发之ContentProvider结合LoaderManager加载数据,现在来实现用ListFragment加载 先看main.xml <LinearLayout..., name); resolver.insert(uri, values); } }); } } 为什么这里不需要初始化LoaderManager...因为LoaderManager监听的是listview和contentprovider的数据变化。...loaderManager; private MyAdapter adapter; @Override public View onCreateView(LayoutInflater...inflater, ViewGroup container, Bundle savedInstanceState) { loaderManager.initLoader
每个 Activity 或片段只有一个 LoaderManager,但 LoaderManager 可管理多个加载器。...--- LoaderManager.LoaderCallbacks 此接口包含加载器事件发生时所调用的回调方法。...LoaderManager获取需要传递Owner,这里必须是Activity 或者fragment 获取一个LoaderManager的实例。...LoaderManager.LoaderCallbacks接口是LoaderManager用来向客户返回数据的方式。 每个Loader都有自己的回调对象供与LoaderManager进行交互。...该回调对象在实现LoaderManager中地位很高,告诉LoaderManager如何实例化Loader(onCreateLoader),以及当载入行为结束或者重启(onLoadFinished或者onLoadReset
每个activity或fragment只有一个LoaderManager。但是一个LoaderManager可以拥有多个装载器。...LoaderManager.LoaderCallbacks 一个用于客户端与LoaderManager交互的回调接口。例如,你使用回调方法onCreateLoader()来创建一个新的装载器。...二,启动一个装载器 LoaderManager管理一个Activiry或Fragment中的一个或多个装载器.但每个activity或fragment只拥有一个LoaderManager....一个LoaderManager.LoaderCallbacks的实现.被LoaderManager调用以报告装载器的事件,在这个例子中,类本实现了这个接口,所以传的是它自己:this....是一个回调接口,它使得客户端可以与LoaderManager进行交互.
它常见的用法是 与 CursorLoader 一起使用,不过应用也可以自由写入自己的加载器,用于加载其他类型的数据 LoaderManager.LoaderCallbacks 回调接口,用于客户端与 LoaderManager...实现,LoaderManager 将调用该实现来报告加载器事件。...LoaderManager 将自动管理加载器的生命周期。LoaderManager 将根据需要启动和停止加载,并维护加载器的状态及其相关内容。这意味着我们将很少与加载器直接进行交互。...当特定事件发生时,我们通常会使用 LoaderManager.LoaderCallbacks 方法干预加载进程。...回调 LoaderManager.LoaderCallbacks 是一个支持客户端与 LoaderManager 交互的回调接口 加载器(特别是 CursorLoader)在停止运行后,仍需保留其数据
每个 Activity 或片段只有一个 LoaderManager,但 LoaderManager 可管理多个加载器。...---- LoaderManager.LoaderCallbacks 此接口包含加载器事件发生时所调用的回调方法。...LoaderManager获取需要传递Owner,这里必须是Activity 或者fragment 获取一个LoaderManager的实例。...LoaderManager.LoaderCallbacks接口是LoaderManager用来向客户返回数据的方式。 每个Loader都有自己的回调对象供与LoaderManager进行交互。...该回调对象在实现LoaderManager中地位很高,告诉LoaderManager如何实例化Loader(onCreateLoader),以及当载入行为结束或者重启(onLoadFinished或者onLoadReset
二 Loader实现 Loader源码在android.content下面,可见它的份量有多重,loader机制包括LoaderManager,Loader,LoaderCallbacks三部分, LoaderManager...1 LoaderManager LoaderManager是抽象类,负责管理一组Loader,主要定义执行Loader的一些抽象方法,类结构如下图: ?...2 实现LoaderManager.Callbacks回调 LoaderManager.LoaderCallbacks是LoaderManager的回调交互接口。...四Loaders相关源码流程 通过上面我们的源码分析和分析前那副图可以总结如下结论: 一次完整的数据加载流程为Activity调用LoaderManager的doStart()方法,LoaderManager...的complete数据加载完成方法,接着又LoaderManager回调我们在Activity中实现的callback中的onLoadFinish()方法。
Loader使用的步骤: 创建FragmentActivity或Fragment 持有LoaderManager的实例实现Loader,用来加载数据源返回的数据实现LoaderManager.LoaderCallbacks...关联上 一个Activity或Fragment有一个唯一的LoaderManager实例 一个LoaderManager实例可以管理多个Loader实例 可以在FragmentActivity或Fragmeng...中使用getSupportLoaderManager()获取到LoaderManager实例 可以使用 initLoader() 或 restartLoader() 方法开始进行数据的加载 //0,为唯一的...ID,可以为任意整数,为Loader的唯一标识 //null,为Bundle类型,可以向Loader传递构造参数 //LoaderCallbacks,LoaderManager对Loader各事件的调用...<D ()); LoaderManager.LoaderCallbacks LoaderManager对Loader各种情况的回调接口,包含三个回调方法 onCreateLoader(int,Bundle
Loader的初始化非常简单,Activity提供了获取LoaderManager的接口,之后调用LoaderManager的initLoader即可。...销毁Loader,只需要使用LoaderManager的destoryLoader即可,参数只传递一个Loader的ID。...MainActivity类的代码比较长,我们分解来看,MainActivity要实现LoaderCallbacks接口 class MainActivity : AppCompatActivity(), LoaderManager.LoaderCallbacks...Phone.DISPLAY_NAME) Toast.makeText(this, cursor.getString(displayNameIndex), Toast.LENGTH_SHORT).show() } loaderManager.initLoader...(LOADER_ID, null, this) } onDestory销毁Loader override fun onDestroy() { super.onDestroy() loaderManager.destroyLoader
public class SearchFragment extends Fragment implements SearchView.OnQueryTextListener, LoaderManager.LoaderCallbacks...if (isEmptyQuery) { final LoaderManager loaderManager = getLoaderManager(); loaderManager.destroyLoader...return true; } private void restartLoaders() { mShowingSavedQuery = false; final LoaderManager...loaderManager = getLoaderManager(); loaderManager.restartLoader(SearchCommon.SearchLoaderId.SEARCH_RESULT...public class SearchFragment extends Fragment implements SearchView.OnQueryTextListener, LoaderManager.LoaderCallbacks
关于测试的核心代码 : package { import com.DispalyLoader; import com.LoaderManager; import com.ResLibrary;...String = $urlHttp.substring( 0 , $urlHttp.indexOf( "MyTest" ) ); trace( http ); var $loader : LoaderManager... = new LoaderManager(true,true); var $txtRes : TextObjectLoader = new TextObjectLoader( this.textCallback... = null; } } } 测试: package { import com.DispalyLoader; import com.ImagePathLoader; import com.LoaderManager... = new LoaderManager(true,true); var $txtRes : TextObjectLoader = new TextObjectLoader( this.textCallback
原文作者:Ian Lake 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:dreamhb 校对者:Starriers 为了 支持库 27.1.0,我重写了 LoaderManager...27.1.0 中的改变 在 27.1.0 中,Loader 的遗留问题已经大幅度的减少:实现 LoaderManager 的代码行数只有之前的三分之一,也有很多的测试让 Loader 在未来能够保持一个良好的状态...注意事项:就技术来说,这次发布之前,你可以在其他线程中做 loader 操作,但是 LoaderManager 不再是线程安全的,会导致经常性的未定义行为。
android.content.Loader.startLoading(Loader.java:290) E AndroidRuntime: at android.app.LoaderManagerImpl$LoaderInfo.start(LoaderManager.java...:283) E AndroidRuntime: at android.app.LoaderManagerImpl.installLoader(LoaderManager.java:579) E AndroidRuntime...: at android.app.LoaderManagerImpl.createAndInstallLoader(LoaderManager.java:566) E AndroidRuntime:...at android.app.LoaderManagerImpl.initLoader(LoaderManager.java:619) E AndroidRuntime: at com.android.settings.search.DynamicIndexableContentMonitor.register...然后这些Loader是由LoaderManager管理启动的。而LoaderManager在DynamicIndexableContentMonitor.java出现过一次初始化操作。
restartBatteryStatsLoader(type); }); } /** * {@link android.app.LoaderManager.LoaderCallbacks...load * the {@link BatteryStatsHelper} */ public class PowerLoaderCallback implements LoaderManager.LoaderCallbacks...getLoaderManager().restartLoader(BATTERY_TIP_LOADER, Bundle.EMPTY, mBatteryTipsCallbacks); } private LoaderManager.LoaderCallbacks...> mBatteryTipsCallbacks = new LoaderManager.LoaderCallbacks<List<BatteryTip
If you are targeting android.os.Build.VERSION_CODES.HONEYCOMB or later, consider instead using LoaderManager
AlbumCollection 实现了 LoaderManager.LoaderCallbacks 接口,将 AlbumLoader 作为加载器,其内部定义了 AlbumCallbacks 接口,在加载资源完成后...AlbumCollection public class AlbumCollection implements LoaderManager.LoaderCallbacks { private...STATE_CURRENT_SELECTION = "state_current_selection"; private WeakReference mContext; private LoaderManager...void onAlbumLoad(Cursor cursor); void onAlbumReset(); } } Matisse 为了降低代码的耦合度,将一些客户端与 LoaderManager...在 onCreate() 中,传入 Activity 用于获取 LoaderManager,加载资源完成后,在 onLoadFinished() 方法中,通过 AlbumCallbacks 的 onAlbumLoad
如下是选择图片中的代码 通过LoaderManager来获取到所有的图片,然后第一个进行拍照的处理 package com.item.demo.photo.activity; import android.Manifest...; import android.app.LoaderManager; import android.content.ContentResolver; import android.content.Context...new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}); } } private class LoadCallBack implements LoaderManager.LoaderCallbacks
下面是一个例子: public class ListViewLoader extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor
extends AppInfoWithHeader implements OnClickListener, Callbacks, DialogInterface.OnClickListener, LoaderManager.LoaderCallbacks
领取专属 10元无门槛券
手把手带您无忧上云