`
shappy1978
  • 浏览: 698561 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Kuix 教程7 Worker

阅读更多

org.kalmeo.util.worker

接触这个类是在Kuix的Demo中的进度条,系统提供两种实现,一种是用Worker添加WorkerTask的,一种是自己用线程,实质都是一样的,Worker是一个线程,处理自己的任务队列,为每个任务启动一个线程,只不过线程没执行一次默认修改60ms.

public static final Worker instance = new Worker();
 Worker会自动创建一个自己的实例,Kuix 在initialize()中会启动这个线程.

KuixCanvas中(264行)会启动一个任务,用它来处理key和mouse事件

workerTask = new WorkerTask() {...}
 另外,Worker还有另外一个作用(473行),Worker.instance.isCurrentThread()用来判断当前运行线程是否是最后一个启用的线程,以此判断当前线程是否属于当前窗口.有点难以理解,我的理解是J2ME用Thread管理所有线程,而Kuix则试图用Worker.instance管理自己的线程.

	/**
	 * Revalidate (and repaint) the desktop as soon as possible. If the current
	 * thread is the worker thread the task is done immedialty else it is
	 * deferred to the next frame.
	 */
	public void revalidateAsSoonAsPossible() {
		if (!Worker.instance.isCurrentThread()) {
			revalidateNextFrame();
		} else {
			forceRevalidate();
			forceRepaint();
		}
	}
	/**
	 * @return <code>true</code> if the current Thread is the {@link Worker} thread
	 */
	public boolean isCurrentThread() {
		return (Thread.currentThread() == thread);
	}
 

KuixMidlet甚至用它来管理Midlet的生命周期,

	/* (non-Javadoc)
	 * @see org.kalmeo.kuix.core.KuixInitializer#destroyImpl()
	 */
	public void destroyImpl() {
		if (Worker.instance.isRunning()) {
			Worker.instance.pushTask(new WorkerTask() {

				/* (non-Javadoc)
				 * @see org.kalmeo.util.worker.WorkerTask#run()
				 */
				public boolean run() {
					destroyApp(false);
					notifyDestroyed();
					return true;
				}
				
			});
		} else {
			destroyApp(false);
			notifyDestroyed();
		}
	}
 

picturebox用它来展示动画(348行)

PopupBox用它来关闭splash的弹出窗口,duration是启动时设置的弹出时间.

	/* (non-Javadoc)
	 * @see org.kalmeo.kuix.widget.Widget#onAdded(org.kalmeo.kuix.widget.Widget)
	 */
	protected void onAdded(Widget parent) {
		if (duration != -1) {
			Worker.instance.pushTask(new WorkerTask() {
				
				private long startTime = System.currentTimeMillis();
				
				/* (non-Javadoc)
				 * @see org.kalmeo.kuix.core.worker.WorkerTask#execute()
				 */
				public boolean run() {
					if ((System.currentTimeMillis() - startTime) > duration) {
						remove();
						return true;
					}
					return false;
				}
				
			});
		}
	}
 

Text用它来,似乎是做走马灯效果.(205行)

TextArea用它在修改文本后,调用onChange方法,不能理解,为什么不直接调用?延时?

	/* (non-Javadoc)
	 * @see javax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable)
	 */
	public void commandAction(Command command, Displayable displayable) {
		if (command == validateCommand) {
			String textBoxString = textBox.getString();
			boolean changed = textBoxString != null && !textBoxString.equals(getText());
			setText(textBoxString);
			if (changed && onChange != null) {
				Worker.instance.pushTask(new WorkerTask() {

					public boolean run() {
						Kuix.callActionMethod(Kuix.parseMethod(onChange, TextArea.this));
						return true;
					}
					
				});
			}
		}
		Display.getDisplay(Kuix.getCanvas().getInitializer().getMIDlet()).setCurrent(Kuix.getCanvas());
	}
 

TextField用来弹出tip


1
1
分享到:
评论

相关推荐

    WorkerDOM实现运行在一个WebWorker中的DOMAPI和框架

    WorkerDOM 是一个JavaScript库,它的主要目标是将DOM API和框架功能带入Web Worker环境。在Web Worker中执行DOM操作可以显著提升Web应用的性能,因为它允许我们在后台线程处理复杂的计算任务,而不阻塞主线程,从而...

    nextjs-worker-example:这是Webpack使用Next.js加载Web Worker的示例

    NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....

    tp5.1+GatewayWorker 修复GatewayWorker在windows启动问题

    命令php think worker:gateway在windows下运行...根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_for_win.bat,启动

    Web Worker版调用Face-Api.js

    7. **faceEnvWorkerPatch.js**:这个文件可能是为了在Worker环境中运行Face-API.js所需的环境配置或补丁。由于Worker线程没有完整的DOM环境,一些库可能需要特别的设置才能在其中正常工作。 8. **使用流程**:在...

    微信小程序基础教程之worker线程的使用方法

    微信小程序中的worker线程使用是前端开发中的一个重要的多线程技术,它允许开发者在小程序中使用Web Worker的概念来创建后台线程,从而实现与主线程的并发运行。这样可以有效地处理一些密集型计算或者耗时较长的操作...

    前端开源库-web-worker-manager

    7. **错误处理**:设置错误监听器,如`workerManager.onerror = function(error) {...}`。 **WorkerManager的扩展与自定义** 除了基本功能,Web Worker Manager可能还允许开发者自定义Worker的创建逻辑、消息处理...

    向Webpack添加原生WebWorker捆绑支持

    然而,默认情况下,Webpack 不直接支持原生Web Worker的捆绑和编译。Web Worker是HTML5引入的一个特性,用于在后台线程中执行脚本,以实现多线程处理,避免阻塞主线程。由于Web Worker的特殊性,其加载和运行机制与...

    ThinkPHP5集成GatewayWorker

    7. **测试与优化**:完成以上步骤后,可以启动ThinkPHP5应用并测试WebSocket功能,根据实际需求进行性能优化,如调整GatewayWorker的工作进程数、内存分配等。 在实际开发过程中,我们可能会遇到以下问题: - **...

    thinkphp5.1完美集成gatewayworker

    7. 说明文档:项目根目录中的Word文档,提供了详细的使用和配置指南。 这个集成项目对于需要实现实时交互功能的Web开发者来说非常有价值,例如在线教育、游戏、金融交易等领域,可以显著提升用户体验并降低开发...

    HTML5 WebWorker

    Web Worker使得复杂的、计算密集型的任务可以在不阻塞用户界面的情况下运行,显著提升了Web应用的性能体验。下面我们将深入探讨Web Worker的基本概念、工作原理以及如何在实际项目中应用。 一、Web Worker基础 1. ...

    Web Worker用法汇总

    1. **创建Worker**: 使用`new Worker()`构造函数创建一个新的Worker对象,传入一个URL,该URL指向一个worker脚本文件。这个脚本文件通常包含需要在后台执行的JavaScript代码。 ```javascript const worker = new ...

    前端开源库-tiny-worker

    2. 创建worker实例:`var worker = new Worker('worker.js');` 这里的'worker.js'是worker线程的脚本文件。 3. 传递数据:使用`worker.postMessage(data)`将数据发送到worker线程。 4. 接收worker返回的数据:在主线...

    pdf.js和pdf.worker.js html打开pdf所需要的js

    7. **性能优化**:由于PDF文档可能很大,开发者需要关注内存管理和性能优化。例如,可以使用流式加载技术分块加载PDF文档,只渲染当前可视区域的页面,以减少内存占用。 8. **安全性**:使用PDF.js时要注意防止XSS...

    Web-Worker在webgl中的应用(百度地图技术团队)1

    1. 主线程创建 Worker 实例:通过 `new Worker('worker.js')` 创建一个新的 Worker 线程,其中 'worker.js' 是工作线程的脚本文件。 2. 监听消息:使用 `worker.onmessage` 事件处理器来接收 Worker 线程发送的消息...

    pdf.js和pdf.worker.js

    7. **交互支持**:PDF.js还提供了缩放、平移、书签导航、搜索和高亮等功能。这些交互可以通过JavaScript API与用户界面进行交互。 8. **性能优化**:PDF.js库还包含了一些优化策略,如缓存已解析的部分,以及对低...

    pdf.js&pdf;.worker.js

    同时,PDF.js社区提供了大量的示例和教程,帮助开发者更好地理解和使用这个库。 总之,`pdf.js`和`pdf.worker.js`是实现Web端PDF查看功能的重要工具,它们结合使用能提供流畅且高效的PDF文档展示体验,而无需依赖...

    Cloudflare worker脚本代理OpenAI对Azure OpenAI服务的请求.zip

    7. **日志记录**:为了调试和监控,可以在Worker中添加日志记录功能,记录请求和响应的详细信息。 压缩包中的"说明.txt"可能包含了安装和部署Worker的指南,以及可能的使用示例。而"cf-openai-azure-proxy_main.zip...

    简单的定时任务 .NETCore3.1 WorkerService.zip

    .NET Core 3.1 Worker Service 是一个用于创建后台任务或长时间运行服务的框架,它在 .NET Core 平台上提供了一种简单的方式来实现定时任务。这个压缩包 "简单的定时任务 .NETCore3.1 WorkerService.zip" 包含了一个...

    GatewayWorker框架源码

    7. 负载均衡: Manager进程会根据负载情况动态调整Worker的数量,实现负载均衡,保证服务的稳定运行。 8. 扩展性: GatewayWorker支持水平扩展,只需增加服务器数量即可应对更高的并发需求。同时,框架的设计允许...

Global site tag (gtag.js) - Google Analytics