一、AndroidLoader的基本方法从android3.0开始就引入了loader。它使得在活动或片段中异步加载数据变得容易。Loader具有以下特点:它们对每个Activity和Fragment都有效。它们提供异步加载数据的能力。他们监视数据源的变化,并在内容发生变化时提供新的结果。当由于配置更改而重新创建时,它们会自动重新连接到之前加载程序的游标,因此无需重新查询数据。LoaderAPI概述使用加载器时,会涉及到许多类和接口。我们在下表中总结了它们:类/接口描述LoaderManager一个抽象类,与Activity或Fragment相关联,用于管理设备的一个或多个加载器实例。这有助于应用程序管理与Activity或Fragment的生命周期相关的长时间运行的操作。最常见的方法是将它与CursorLoader一起使用,但是应用程序可以自由编写自己的加载器来加载其他类型的数据。每个活动或片段只有一个LoaderManager。但是LoaderManager可以有多个加载器。LoaderManager.LoaderCallbacks客户端与LoaderManager交互的回调接口。例如,您使用回调方法onCreateLoader()来创建一个新的加载器。加载器(loader)一个抽象类,执行异步数据加载。它是加载器的基类。您可以使用经典的CursorLoader,但也可以实现自己的子类。一旦加载器被激活,它们将监控它们的数据源并在数据发生变化时发送新的结果。AsyncTaskLoader提供了一个名为AsyncTask的抽象类来执行异步加载工作。CursorLoaderAsyncTaskLoader的子类,它查询ContentResolver并返回Cursor。此类以查询游标的标准方式实现加载程序协议。它的游标查询通过AsyncTaskLoader在后台线程中执行,以免阻塞接口。使用此加载器是从ContentProvider异步加载数据的唯一方法。相反,通过片段或活动API执行托管查询将不起作用。2.启动加载程序。LoaderManager在一个Activiry或Fragment中管理一个或多个加载器。但是每个activity或者fragment只有一个LoaderManager。您通常必须使用活动的onCreate()方法或片段的onActivityCreated()方法在.您可以按如下方式创建它://Prepareloader。您可以重新连接现有的或开始一个新的。getLoaderManager().initLoader(0,null,this);initLoader()方法具有以下参数:用于标识加载程序的唯一ID。在本例中,ID为0。加载器初始化时使用的可选参数(本例中为null)。LoaderManager.LoaderCallbacks的实现。由LoaderManager调用以报告加载程序事件。在这个例子中,类实现了这个接口,所以它传递了自己:this.initLoader()保证了一个加载器被初始化和激活。它有两种可能的结果:如果ID指向的加载器已经存在,那么这个加载器将被重用。如果loader不存在,initLoader()会触发LoaderManager.LoaderCallbacks()的onCreateLoader方法。这是您实例化并返回新加载程序的地方。在这两种情况下,传入的LoaderManager.LoaderCallbacks实现都绑定到加载程序。并且会在加载程序的状态发生变化时被调用。称呼。如果调用该方法时调用者处于启动状态,并且请求的loader已经存在并产生数据,系统会立即调用onLoadFinished()(也就是initLoader()还在执行的时候)。所以你要做好准备为此。请注意initLoader()返回创建的加载器,但您不需要保留对它的引用。LoaderManager自动管理加载程序的生命周期。LoaderManager会在需要时启动和停止加载动作,并维护加载器的状态及其关联的内容。这意味着您很少直接与加载器交互。在数据加载过程中,当事件发生时,你通常会使用LoaderManager.LoaderCallbacks的方法进行干预。3.使用时重启loaderitLoader(),如果指定ID的loader已经存在,则使用这个loader。如果它不存在,它将创建一个新的。但有时您想丢弃旧数据并开始新数据。要丢弃旧数据,您应该使用restartLoader()。例如,以下SearchView.OnQueryTextListener的实现会在用户查询更改时重新启动加载程序。然后需要重新启动加载程序以使用新的搜索过滤器执行新的查询。publicbooleanonQueryTextChanged(StringnewText){//当操作栏中的搜索字符串发生变化时调用。//更新搜索过滤器,然后重新启动加载器以使用这个新过滤器进行新查询。mCurFilter=!TextUtils.isEmpty(newText)?newText:null;getLoaderManager().restartLoader(0,null,this);returntrue;}LoaderManager.LoaderCallbacks是一个回调接口,使客户端能够与LoaderManager进行交互。Loader,一般指的是CursorLoader,我们要在它停止后保留数据。这允许应用程序在活动或片段的onStop()和onStart()之间保留数据,因此当用户返回到应用程序时,他们不必等待数据加载。您可以使用LoaderManager.LoaderCallbacks方法在需要时创建新的加载程序并告知应用程序何时停止使用加载程序的数据。LoaderManager.LoaderCallbacks包含以下方法:onCreateLoader()——根据传递的ID初始化并返回一个新的加载器。onLoadFinished()-当加载程序完成其加载过程时调用。onLoaderReset()——加载器重置且其数据无效时调用。当您尝试对加载器进行操作时(例如,通过initLoader()),它会检查是否已存在具有指定ID的加载器。如果不存在,会触发LoaderManager.LoaderCallbacks的onCreateLoader()方法。这是您创建新加载程序的地方。通常这个加载器是一个CursorLoader,但您也可以实现自己的加载器。StringmCurFilter;...publicLoader
