android在异步任务中关闭Cursor的代码方法_Android

查询数据会比较耗时,所以我们想把查询数据放在一个异步任务中,查询结果获得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。

复制代码 代码如下:

Cursor cursor = null;
try{
    cursor = mContext.getContentResolver().query(uri,null,null,null,null);
    if(cursor != null){
        cursor.moveToFirst();
    //do something
    }
}catch(Exception e){
    e.printStatckTrace();
}finally{
    if(cursor != null){
        cursor.close();
    }
}

时间: 2024-11-21 00:07:31

android在异步任务中关闭Cursor的代码方法_Android的相关文章

Android MVP模式ListView中嵌入checkBox的使用方法_Android

MVP模式 ListView中嵌入checkBox的使用 本文写的是一个小demo,如何在ListView中嵌入checkBox配合使用,本篇文章与前面的嵌入Button类似,同样的采用MVP模式的写代码,本次案例中会有几个小细节,我将会在案例中介绍. 程序基本框架如下: View层: MainActivity.java public class MainActivity extends AppCompatActivity implements ViewInter<MyBean>{ //Lis

win8系统中关闭索引服务的方法

  何为索引服务,估计很多人并没有一个系统的了解,但是却会在日常中用到的功能,就是为我们电脑中的文件.文档.邮件等等提供快速搜索的一个平台,不管我们的电脑中是增加了文件,还是删除了某文件,win8系统都会自动记录这样的改动,从而开启索引功能.虽说这个功能是给我们的生活带了了很大的便利,但是相对于使用SSD固态硬盘的用户来说,就是形同虚设的了,因为SSD硬盘本身具有随机读取性能,比系统自带的索引功能强大很多.下面小编就为一些不需要索引功能的小伙伴们来讲解一下,如果删除win8电脑中的索引功能. w

工程引用-Android在主工程中引用其他工程代码和资源出现闪退

问题描述 Android在主工程中引用其他工程代码和资源出现闪退 log日志如上,有些看不懂,求大神指教! 解决方案 MainActivity没有在AndroidManifest.xml中声明把. 解决方案二: 第三行显示:可能是你要启动的Activity没有在配置文件AndroidManifest.xml中声明 解决方案三: 你是不是没有在AndroidManifest.xml里声明要调用的activity? 解决方案四: eclipse使用的adt不会整合库项目的清单文件(至少23.0.6及

安卓开发:是否能在我自己的异步登录中调用SDK的登录方法EMChatManager.getInstance().login

问题描述 安卓开发:是否能在我自己的异步登录中调用SDK的登录方法EMChatManager.getInstance().login 问题如上,错误信息:SMACK-Voe:enter JNI_OnLoad 解决方案 不要异步调用登录方法,同步调用登录试试.在登录的回调函数没有返回的情况下重复多次调用此函数会导致负面的影响 自动登录的情况下(就是之前登录过从没注销过),无需再次调用此函数

Android实现在ServiceManager中加入自定义服务的方法详解

本文实例讲述了Android实现在ServiceManager中加入自定义服务的方法.分享给大家供大家参考,具体如下: 当我们要使用android的系统服务时,一般都是使用Context.getSystemService方法.例如我们要获取AudioManager,我们可以: AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 获取的服务,其实是在ServiceManager中注册的Binder服务,

Android异步回调中的UI同步性问题分析_Android

Android程序编码过程中,回调无处不在.从最常见的Activity生命周期回调开始,到BroadcastReceiver.Service以及Sqlite等.Activity.BroadcastReceiver和Service这些基本组件的回调路径和过程也就是通常意义上所谓的"生命周期".同时,在处理具体的业务逻辑时,常常设计到不同线程之间的通信,如下载图片完成后通知 UI线程更新UI,凡此类场景,无论使用哪一种具体的线程间通信方式(Handler/Message.Handler/p

android asynctask-在异步任务中获取内容

问题描述 在异步任务中获取内容 在类名为Opciones的异步任务中获取内容.不知道具体步骤,我看过一些代码: protected void onPostExecute(Long result) { Toast.makeText(Opciones.this,"Subiendo la foto. ?Tras ser moderada empezara a ser votada!: ", Toast.LENGTH_LONG).show(); } 用过之后报错:No enclosing in

Android实现退出时关闭所有Activity的方法_Android

本文示例实现了Android退出时关闭所有Activity的功能,分享给大家供大家参考之用.具体方法如下: 一般来说,在Android退出时,有的Activity可能没有被关闭.为了在Android退出时关闭所有的Activity,这里给出了以下的类: //关闭Activity的类 public class CloseActivityClass{ public static List<Activity> activityList = new ArrayList<Activity>(

实例讲解Android中ContentProvider组件的使用方法_Android

ContentProvider基本使用为了在应用程序之间交换数据,android提供了ContentProvider,ContentProvider是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他程序使用时,该应用程序就可以通过提供ContentPRovider来实现,其他应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据. 实现ContentProvider的步骤: 1)编写一个类,继承ContentProvide