`

让class只有一个实例的例子

阅读更多
最近在学习android 的webkit,看到一些自己认为是好的代码或者方式就把它记录下来,方便以后复习与借鉴。
WebViewDatabase是一个单实例对象,通过getInstance方法获取WebViewDatabase的实例。WebViewDatabase是WebKit模块中的内部对象,仅供WebKit框架内部使用。
	private static WebViewDatabase mInstance = null;
private WebViewDatabase() {
		// Singleton only, use getInstance()
	}

public static synchronized WebViewDatabase getInstance(Context context) {
		if (mInstance == null) {
			mInstance = new WebViewDatabase();
			mDatabase = context.openOrCreateDatabase(DATABASE_FILE, 0, null);

			// mDatabase should not be null,
			// the only case is RequestAPI test has problem to create db
			if (mDatabase != null && mDatabase.getVersion() != DATABASE_VERSION) {
				mDatabase.beginTransaction();
				try {
					upgradeDatabase();
					mDatabase.setTransactionSuccessful();
				} finally {
					mDatabase.endTransaction();
				}
			}

			if (mDatabase != null) {
				// use per table Mutex lock, turn off database lock, this
				// improves performance as database's ReentrantLock is expansive
				mDatabase.setLockingEnabled(false);
			}

			mCacheDatabase = context.openOrCreateDatabase(CACHE_DATABASE_FILE,
					0, null);

			// mCacheDatabase should not be null,
			// the only case is RequestAPI test has problem to create db
			if (mCacheDatabase != null
					&& mCacheDatabase.getVersion() != CACHE_DATABASE_VERSION) {
				mCacheDatabase.beginTransaction();
				try {
					upgradeCacheDatabase();
					bootstrapCacheDatabase();
					mCacheDatabase.setTransactionSuccessful();
				} finally {
					mCacheDatabase.endTransaction();
				}
				// Erase the files from the file system in the
				// case that the database was updated and the
				// there were existing cache content
				CacheManager.removeAllCacheFiles();
			}

			if (mCacheDatabase != null) {
				// use InsertHelper for faster insertion
				mCacheInserter = new DatabaseUtils.InsertHelper(mCacheDatabase,
						"cache");
				mCacheUrlColIndex = mCacheInserter
						.getColumnIndex(CACHE_URL_COL);
				mCacheFilePathColIndex = mCacheInserter
						.getColumnIndex(CACHE_FILE_PATH_COL);
				mCacheLastModifyColIndex = mCacheInserter
						.getColumnIndex(CACHE_LAST_MODIFY_COL);
				mCacheETagColIndex = mCacheInserter
						.getColumnIndex(CACHE_ETAG_COL);
				mCacheExpiresColIndex = mCacheInserter
						.getColumnIndex(CACHE_EXPIRES_COL);
				mCacheMimeTypeColIndex = mCacheInserter
						.getColumnIndex(CACHE_MIMETYPE_COL);
				mCacheEncodingColIndex = mCacheInserter
						.getColumnIndex(CACHE_ENCODING_COL);
				mCacheHttpStatusColIndex = mCacheInserter
						.getColumnIndex(CACHE_HTTP_STATUS_COL);
				mCacheLocationColIndex = mCacheInserter
						.getColumnIndex(CACHE_LOCATION_COL);
				mCacheContentLengthColIndex = mCacheInserter
						.getColumnIndex(CACHE_CONTENTLENGTH_COL);
			}
		}

		return mInstance;
	}

WebViewDatabase db = WebViewDatabase.getInstance(this);

分享到:
评论
1 楼 daylyn 2010-10-27  
就是个单利啦~~

相关推荐

    wpf 相关实例代码例子

    wpf 多个 相关实例代码例子 namespace LogonScreen { using System; using System.Collections; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using...

    Python面向对象之类和对象实例详解

    属性一般是一个个变量;方法是一个个函数; #类的属性 就是 类变量 #实例变量:定义在方法中的变量,只作用于当前实例的类。 例子: class Turtle:#python 中类名约定以大写字母开头 '''关于类的简单例子。。。'''...

    labview例子

    labview例子

    PyQt4 精彩实例分析26个例子

    pyqt4精彩实例讲解,适合pyqt4初级学习者,经供参考第6行创建了一个 QPush Button对象,并设置它的显示文木为“ Hello Kitty!",由于此处并 没有指定按钮的父窗体,因此以自己作为主窗凵 第7行调用show()方法,显示...

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC...另外还有两个东东,一个是class2hbm,与第一个相反,是根据class来导出映射文件的。还有一个ddl2hbm,是根据数据库来导出表结构,并生成映射文件和POJO class。

    Spring MVC 入门实例

    配置 DispatcherServlet (servlet 标签), 它是一个 Java Servlet 程序. 我们将它命名为 ideawu. 然后我们再配置 Servlet 映射(servlet-mapping 标签), 也就是你希望哪些请求被DispatcherServlet处理. 这里, 我们设置...

    JAVA多线程编程详解-详细操作例子(转自CSDN)

    Runnable 接口只有一个方法 run(),我们声明自己的类实现 Runnable 接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是 Runnable 接口并没有任何对线程的支持,我们还必须创建 Thread ...

    c++私有构造函数例子

    创建一个class,让其只能创建一个实例对象的例子·

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    linux sysfs 原理及其编程实例

    linux sysfs 原理及其编程实例, 包含 class, device , bus 等各种类型的范例.

    决策树算法--java_class values(分类依据) unacc, acc, good, vgood,java决策树生成算法实例

    汽车有6个属性,每个属性都有几种类别,根据这6个属性来判断汽车的性价比Classvalue如何, ClassValues有以下几种情况unacc,acc, good,vgood buying( vhigh,high,med,low) maint(vhigh,high,med,low) doors( 2,...

    jQuery根据ID、CLASS、等获取对象的实例

    在以下的例子中,有类名为p1和类名为p2 和id 为div3 的所有元素将会动态的添加一个红色的边框。 <html> <head> <title>select mutiple elements example</title> [removed][removed] <...

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    带实例的phpmailer

    很好用的php程序发送邮件的类,使用也很简单,包中还有实例。

    一个整合ssm框架的实例

    是一个适合新手的比较好的例子, <!-- 自动扫描该包下面带有注解的类 --> <!-- 导入数据库配置文件 --> <!-- 配置数据库连接池 --> <bean id="dataSource" class=...

    简洁的定时任务实例

    一,任务列表(多个定时任务可在task:scheduled-tasks中写多个task:scheduled-task) */5 * * * * ?"/> </task:scheduled-tasks> 二,相对的类和方法 <bean id="myTaskXml" class="test.task"></bean>

    Java EJB简单例子.rar

    Java EJB简单例子,这是HelloWorldBean的Home接口,它是EJB对象的生成库,无状态会话(将在下一个实例中具体讲解)Bean,这个接口是客户端与EJB对象相互作用的中间途径,通过Client触发调用Bean方法:  try {  //...

    ts-class-initializable:TypeScript抽象类,允许从普通对象初始化实例属性

    ts-class-initializable 一个小助手,用于从纯对象启用类实例属性的初始化。 扩展一个Initializable类,您的类构造函数将接受一个普通对象文字作为其第一个参数,并将这些值分配给实例属性。例子class Foo extends ...

    vc++ 开发实例源码包

    演示了OpenG的使用方法,内含几个实例,一个实例就3个文件。 p2p vb实例。 p2p+technology 文档。 P2P视频技术源码(含开发文档) 目前的协议有如下一些特点: 1) 客户向服务器发送请求, 每个请求的长度不定. 请求...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

Global site tag (gtag.js) - Google Analytics