`
ouyangfeng521
  • 浏览: 248648 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于android contentprovider 多线程读取问题

 
阅读更多
/**
 * @(#) TestActivity.java Created on 2014-3-7
 *
 * 
 */
package com..android.app.ui;

import java.util.Random;
import java.util.UUID;

import com..gx.oatos.R;
import com..android.business.provider.PreferenceProvider;
import com..android.preferences.SysPreferences;

import android.app.Activity;
import android.os.Bundle;
import android.preference.Preference;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

/**
 * The class <code>TestActivity</code>
 * 
 * @author Feng OuYang
 * @version 1.0
 */
public class TestActivity extends Activity {

	
	private Button button1,button2;
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		setContentView(R.layout.test);
		super.onCreate(savedInstanceState);
		
		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		
		button1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				new Thread(new Write()).start();
			}
		});
		
		button2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				new Thread(new Read()).start();
				
			}
		});
	}
	
	private class Read implements Runnable{

		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		@Override
		public void run() {
			for(;;){
				Log.e("Read", "====================Read==================================1:" + System.currentTimeMillis());
				new PreferenceProvider(getApplicationContext()).getlist();
//				try {
					//Thread.sleep(10);
					Log.e("Read", "====================Read==================================");
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
					Log.e("Read", "====================Read==================================2:" + System.currentTimeMillis());
			}
		}
		
	}
	
	private class Write implements Runnable{

		/* (non-Javadoc)
		 * @see java.lang.Runnable#run()
		 */
		@Override
		public void run() {
			for(;;){
				Log.e("Write", "====================Write==================================1:" + System.currentTimeMillis());
				SysPreferences.put(UUID.randomUUID().toString(), "111");
//				try {
					//Thread.sleep(10);
					Log.e("Write", "====================Write==================================");
//				} catch (InterruptedException e) {
//					e.printStackTrace();
//				}
					Log.e("Write", "====================Write==================================2:" + System.currentTimeMillis());
			}
		}
		
	}
}

 

ContentProvider :

/**
 * @(#) ChinaUnicomOatosProvider.java Created on 2014-3-7
 *
 * Copyright © 2013 深圳企业云科技有限公司  版权所有
 */
package com.qycloud.android.app;

import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;

import com.qycloud.android.provider.OatosProvider;

/**
 * The class <code>ChinaUnicomOatosProvider</code>
 * 
 * @author Feng OuYang
 * @version 1.0
 */
public class ChinaUnicomOatosProvider extends OatosProvider {

	/* (non-Javadoc)
	 * @see com.qycloud.android.provider.OatosProvider#query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String)
	 */
	@Override
	public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
			String sortOrder) {
		Log.d("ChinaUnicomOatosProvider query", "thread:" + Thread.currentThread().getName());
		return super.query(uri, projection, selection, selectionArgs, sortOrder);
	}
	
	/* (non-Javadoc)
	 * @see com.qycloud.android.provider.OatosProvider#insert(android.net.Uri, android.content.ContentValues)
	 */
	@Override
	public Uri insert(Uri uri, ContentValues values) {
		Log.d("ChinaUnicomOatosProvider insert", "thread:" + Thread.currentThread().getName());
		return super.insert(uri, values);
	}
	
}

 

测试结果 :contentprovider 读取写入时会采用一个或者多个线程操作数据库sqlite,activity读和取不用等待

 

分享到:
评论

相关推荐

    Android中多线程下载原理实现案例

    在Android开发中,多线程下载是一项常见的技术,它能够显著提高大文件的下载效率,尤其是在网络环境不稳定或带宽有限的情况下。本案例主要探讨了Android中如何利用多线程来实现高效、稳定的文件下载。 首先,理解多...

    Android高级应用源码-利用contentprovider扫描内存卡上所有的音频文件

    考虑到性能,扫描速度要求300首歌能在50毫秒内完成,这需要优化扫描算法,可能采用多线程、异步加载或者缓存策略。 5. 扫描音频文件。Android提供了`MediaStore`类,它是一个内置的ContentProvider,可以获取设备上...

    Android读取本地照片和视频相册实例代码

    总结来说,通过ContentProvider,Android开发者可以方便、高效地读取设备上的照片和视频,而无需直接操作文件系统,从而避免了性能问题和潜在的安全风险。这个方法适用于大部分需要访问用户媒体库的应用场景。

    安卓Android源码——安卓Android多线程断点续传下载+在线播放音乐.zip

    本资料包"安卓Android源码——安卓Android多线程断点续传下载+在线播放音乐.zip"提供了一个完整的示例,涵盖了多线程技术、断点续传下载以及音乐在线播放的关键知识点。现在,我们将详细探讨这些核心概念。 首先,...

    ContentProvider工具类

    2. 数据同步:考虑到多线程环境下,使用ContentProvider进行数据操作时,应确保线程安全。 3. 性能优化:对于大量数据的操作,考虑使用批处理或异步处理,避免阻塞UI线程。 总结,ContentProvider工具类是Android...

    nexus5 android5.0 读取本机短信

    在实际开发中,可能会遇到权限问题、数据过滤问题、多线程同步等问题,都需要根据具体情况进行解决。 标签中的“源码”提示我们可能需要阅读和理解Android系统的源码,以深入理解短信服务的工作原理。“工具”可能...

    Android 通讯录程序附源码

    通过研究这两个源码项目,开发者不仅可以学习到如何实现一个功能完备的通讯录应用,还可以深入理解Android应用开发的各个环节,包括UI设计、数据处理、权限管理、多线程编程以及与系统服务的交互。这对于提升Android...

    简单通用的ContentProvider

    首先,ContentProvider是Android四大组件之一,它是Android系统提供的一种机制,使得应用的数据可以被其他应用读取或写入。通过ContentProvider,开发者可以暴露自己的数据集,而无需关心数据存储的具体形式,如...

    自定义ContentProvider

    总结,自定义ContentProvider是Android开发中非常重要的部分,它实现了数据的安全共享,理解并掌握ContentProvider的原理和使用,对于构建复杂的多应用协作环境至关重要。在实际开发中,我们需要结合业务需求,灵活...

    Android高级应用源码-下载网络图片 (整合多线程、内存缓存、本地文件缓存~).zip

    这个源码包"Android高级应用源码-下载网络图片 (整合多线程、内存缓存、本地文件缓存~).zip"提供了一个完整的解决方案,展示了如何高效地处理网络图片下载与缓存。下面我们将深入探讨其中涉及的主要知识点: 1. **...

    android异步在网络上读取多张图片,显示在页面布局GridView,viewPager,gallery,ListView

    在Android开发中,异步加载网络图片是一项常见的需求,特别是在构建包含多个图片的视图组件如GridView、ViewPager、Gallery和ListView时。这些组件通常用于展示相册、产品列表或者社交媒体内容,因此高效的图片加载...

    Android笔记

    `android笔记_多线程编程.docx`关注Android中的并发和多线程。Android主线程(UI线程)负责处理用户交互,因此需要避免在此线程执行耗时操作,以防阻塞用户界面。文件可能讲解了Handler、Looper、ThreadPoolExecutor...

    Android音乐播放器(Android studio)

    【Android音乐播放器开发详解】 在Android开发领域,构建一个音乐播放器是常见的实践项目,它可以帮助开发者深入了解Android...通过实际操作,开发者不仅可以深入理解Android系统,还能提高编程技巧和问题解决能力。

    android 电话本 Phonebook

    ContentProvider是Android四大组件之一,它提供了统一的方式来读取和写入应用程序的数据,即使这些数据存储在不同的数据源中。 在创建自定义Phonebook应用时,我们需要理解和实现ContentProvider的生命周期方法,如...

    Android代码-Android导入导出txt通讯录工具.rar

    理解Android的多线程模型和生命周期管理至关重要。 7. **用户界面设计**:为了实现用户友好的界面,需要使用XML布局文件和Android的视图组件(如Button、EditText、ListView等)。同时,你也需要掌握如何处理按钮...

    基于Android的简单多媒体播放器

    在Android平台上开发一个简单的多媒体播放器是一个非常实用的学习项目,它涵盖了Android SDK中的多个关键知识点。这个基于Android的简单多媒体播放器旨在帮助开发者理解和实践如何处理音频和视频内容的播放。下面将...

    android应用开发详解

    这篇详细的讲解将涵盖Android应用开发的基础概念、开发环境搭建、UI设计、数据存储、网络通信、多线程处理以及性能优化等多个方面。 首先,基础概念是学习Android开发的起点。Android是一个基于Linux内核的操作系统...

    《Android江湖》随书配套源代码清单

    通过分析和运行这些代码,你可以更直观地理解Android应用的架构设计、UI布局、数据存储、网络通信、多线程处理、服务、广播接收器等关键知识点。 1. **UI设计与布局**:在Android应用中,用户界面是与用户交互的...

    Android通讯录

    综上所述,"Android通讯录"项目涵盖了Android平台上的多个核心知识点,包括但不限于Android的ContentProvider、XML数据存储、文件操作、UI设计以及数据同步。这些技术是Android开发的基础,理解和掌握它们对于构建...

Global site tag (gtag.js) - Google Analytics