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
分享到:
相关推荐
WorkerDOM 是一个JavaScript库,它的主要目标是将DOM API和框架功能带入Web Worker环境。在Web Worker中执行DOM操作可以显著提升Web应用的性能,因为它允许我们在后台线程处理复杂的计算任务,而不阻塞主线程,从而...
NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....
命令php think worker:gateway在windows下运行...根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_for_win.bat,启动
微信小程序中的worker线程使用是前端开发中的一个重要的多线程技术,它允许开发者在小程序中使用Web Worker的概念来创建后台线程,从而实现与主线程的并发运行。这样可以有效地处理一些密集型计算或者耗时较长的操作...
7. **faceEnvWorkerPatch.js**:这个文件可能是为了在Worker环境中运行Face-API.js所需的环境配置或补丁。由于Worker线程没有完整的DOM环境,一些库可能需要特别的设置才能在其中正常工作。 8. **使用流程**:在...
7. **错误处理**:设置错误监听器,如`workerManager.onerror = function(error) {...}`。 **WorkerManager的扩展与自定义** 除了基本功能,Web Worker Manager可能还允许开发者自定义Worker的创建逻辑、消息处理...
然而,默认情况下,Webpack 不直接支持原生Web Worker的捆绑和编译。Web Worker是HTML5引入的一个特性,用于在后台线程中执行脚本,以实现多线程处理,避免阻塞主线程。由于Web Worker的特殊性,其加载和运行机制与...
7. **测试与优化**:完成以上步骤后,可以启动ThinkPHP5应用并测试WebSocket功能,根据实际需求进行性能优化,如调整GatewayWorker的工作进程数、内存分配等。 在实际开发过程中,我们可能会遇到以下问题: - **...
7. 说明文档:项目根目录中的Word文档,提供了详细的使用和配置指南。 这个集成项目对于需要实现实时交互功能的Web开发者来说非常有价值,例如在线教育、游戏、金融交易等领域,可以显著提升用户体验并降低开发...
Web Worker使得复杂的、计算密集型的任务可以在不阻塞用户界面的情况下运行,显著提升了Web应用的性能体验。下面我们将深入探讨Web Worker的基本概念、工作原理以及如何在实际项目中应用。 一、Web Worker基础 1. ...
1. **创建Worker**: 使用`new Worker()`构造函数创建一个新的Worker对象,传入一个URL,该URL指向一个worker脚本文件。这个脚本文件通常包含需要在后台执行的JavaScript代码。 ```javascript const worker = new ...
2. 创建worker实例:`var worker = new Worker('worker.js');` 这里的'worker.js'是worker线程的脚本文件。 3. 传递数据:使用`worker.postMessage(data)`将数据发送到worker线程。 4. 接收worker返回的数据:在主线...
7. **性能优化**:由于PDF文档可能很大,开发者需要关注内存管理和性能优化。例如,可以使用流式加载技术分块加载PDF文档,只渲染当前可视区域的页面,以减少内存占用。 8. **安全性**:使用PDF.js时要注意防止XSS...
1. 主线程创建 Worker 实例:通过 `new Worker('worker.js')` 创建一个新的 Worker 线程,其中 'worker.js' 是工作线程的脚本文件。 2. 监听消息:使用 `worker.onmessage` 事件处理器来接收 Worker 线程发送的消息...
7. **交互支持**:PDF.js还提供了缩放、平移、书签导航、搜索和高亮等功能。这些交互可以通过JavaScript API与用户界面进行交互。 8. **性能优化**:PDF.js库还包含了一些优化策略,如缓存已解析的部分,以及对低...
同时,PDF.js社区提供了大量的示例和教程,帮助开发者更好地理解和使用这个库。 总之,`pdf.js`和`pdf.worker.js`是实现Web端PDF查看功能的重要工具,它们结合使用能提供流畅且高效的PDF文档展示体验,而无需依赖...
7. **日志记录**:为了调试和监控,可以在Worker中添加日志记录功能,记录请求和响应的详细信息。 压缩包中的"说明.txt"可能包含了安装和部署Worker的指南,以及可能的使用示例。而"cf-openai-azure-proxy_main.zip...
.NET Core 3.1 Worker Service 是一个用于创建后台任务或长时间运行服务的框架,它在 .NET Core 平台上提供了一种简单的方式来实现定时任务。这个压缩包 "简单的定时任务 .NETCore3.1 WorkerService.zip" 包含了一个...
7. 负载均衡: Manager进程会根据负载情况动态调整Worker的数量,实现负载均衡,保证服务的稳定运行。 8. 扩展性: GatewayWorker支持水平扩展,只需增加服务器数量即可应对更高的并发需求。同时,框架的设计允许...