关于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读和取不用等待

猜你喜欢

转载自ouyangfeng521.iteye.com/blog/2026913