AsyncProcedures异步过程扩展
下载和安装
- AsyncProcedures扩展: co.sgext_.asyncprocedure.aix
开发动机
Async Proc是一个扩展,您可以使用它来异步运行过程。您不再需要等待循环完成,也不必担心由于Android系统认为您的应用程序无响应而导致应用崩溃。
功能概述
AsyncProcedures异步过程扩展提供以下核心功能:
- 异步执行: 允许过程异步运行,避免阻塞主线程
- 防止ANR: 防止应用程序因长时间运行的操作而崩溃
- 循环优化: 特别适用于需要长时间运行的循环操作
- 性能提升: 提高应用响应性,避免界面冻结
使用场景
适用情况
- 大数据处理: 处理大量数据时的异步操作
- 文件读写: 大文件的读取和写入操作
- 网络请求: 需要一定时间的网络操作
- 复杂计算: 耗时的数学计算或算法处理
- 批量操作: 需要循环执行的批量任务
典型应用案例
- 数据加载: 从数据库或文件加载大量数据
- 图像处理: 批量处理图像文件
- 列表操作: 对长列表进行遍历和处理
- API调用: 多个API请求的异步处理
基本用法
异步执行过程
使用AsyncProcedures扩展执行异步过程的基本模式:
// 异步执行耗时过程
when Button1.Click
do
// 异步调用耗时过程
call AsyncProcedures1.RunProcedure LongRunningProcess
// 异步过程完成后的回调
when AsyncProcedures1.ProcedureCompleted
do
show notification "异步过程执行完成"
带参数的异步过程
// 异步执行带参数的过程
when ProcessDataButton.Click
do
// 传递参数给异步过程
call AsyncProcedures1.RunProcedureWithData DataProcessingProcess dataList
// 处理异步过程返回的结果
when AsyncProcedures1.ProcedureCompletedWithResult result
do
// 处理返回的结果数据
set ResultLabel.Text to "处理结果: " & result
属性
- 是否正在运行
- 指示是否有异步过程正在执行。
- 超时时间
- 设置异步过程的超时时间(毫秒),超过此时间过程将被中断。
方法
- 运行过程(过程名称)
- 异步运行指定的过程。该过程将在后台线程中执行,不会阻塞主线程。
- 运行过程带数据(过程名称,数据)
- 异步运行指定的过程,并传递数据参数。
- 停止过程()
- 停止当前正在执行的异步过程。
- 获取结果() → {:.any}
- 获取已完成的异步过程的返回结果。
事件
- 过程完成()
- 异步过程执行完成时触发。
- 过程完成带结果(结果)
- 带返回值的异步过程完成时触发,包含过程的结果数据。
- 过程错误(错误信息)
- 异步过程执行过程中发生错误时触发。
- 过程超时()
- 异步过程执行超时时触发。
最佳实践
1. 过程设计原则
- 避免UI操作: 异步过程中避免直接操作UI组件
- 合理拆分: 将大任务拆分为适当大小的异步任务
- 错误处理: 为异步过程添加适当的错误处理机制
2. 性能优化
- 控制并发: 避免同时运行过多的异步过程
- 资源管理: 注意异步过程中的资源使用和释放
- 内存优化: 避免在异步过程中产生大量内存占用
3. 用户体验
- 进度反馈: 为长时间运行的异步过程提供进度反馈
- 加载提示: 显示加载状态或进度条
- 结果处理: 妥善处理异步过程的结果
使用示例
示例1:数据处理
// 处理大量数据的异步过程
when ProcessLargeDataButton.Click
do
show notification "开始处理数据..."
call AsyncProcedures1.RunProcedureWithData ProcessLargeData global_DataList
// 异步处理过程
procedure ProcessLargeData dataList
// 创建处理结果
make local ProcessedData from list
// 遍历处理每个数据项
for each item in dataList
// 模拟耗时处理
call wait 100
// 处理数据项
add item * 2 to ProcessedData
// 返回处理结果
return ProcessedData
// 处理完成后的回调
when AsyncProcedures1.ProcedureCompletedWithResult result
do
set ResultLabel.Text to "处理完成,共处理 " & length of result & " 条数据"
show notification "数据处理完成!"
示例2:文件操作
// 异步读取多个文件
when ReadFilesButton.Click
do
make global FileList from list "file1.txt", "file2.txt", "file3.txt"
call AsyncProcedures1.RunProcedureWithData ReadMultipleFiles FileList
// 异步读取文件过程
procedure ReadMultipleFiles fileList
make local AllContents from list
for each fileName in fileList
// 模拟文件读取
call wait 200
// 读取文件内容
set FileContent to read from fileName
add FileContent to AllContents
return AllContents
// 文件读取完成
when AsyncProcedures1.ProcedureCompletedWithResult contents
do
set FileContentsLabel.Text to join "All files read successfully: " & length of contents & " files"
常见问题
Q: 异步过程中如何更新UI?
A: 异步过程不能直接更新UI,需要在过程完成后的回调事件中更新UI组件。
Q: 如何处理异步过程的错误?
A: 使用ProcedureError事件来捕获和处理异步过程中的错误。
Q: 异步过程会阻塞应用吗?
A: 不会。异步过程在后台线程中执行,不会阻塞主线程和UI操作。
Q: 如何控制异步过程的执行顺序?
A: 可以通过在前一个异步过程的完成事件中启动下一个异步过程来控制执行顺序。
相关扩展
如果您需要更多的后台任务处理功能,还可以考虑以下扩展:
- Background Tasks: 专门的后台任务处理扩展
- DelayHandler: 延迟处理和时间控制扩展
- Web Component: 异步网络请求处理
本文档基于Kodular社区的Async Procedures扩展信息整理而成。如需获取完整的扩展文件和详细文档,请访问原帖。
扫码添加客服咨询