注册 登录
发贴工具
查看: 7|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] AIWROK使用activity列表开关与进度条的协同交互

[复制链接]

2574

主题

2622

帖子

1万

积分

积分
15620
跳转到指定楼层
楼主
AIWROK使用activity列表开关与进度条的协同交互
AIWROK使用activity列表开关与进度条的协同交互 群发软件发帖工具

  1. /**
  2. * AIWROK使用activity列表开关与进度条的协同交互
  3. *
  4. * 功能亮点:
  5. * 1. 动态 UI 构建:使用 activity 创建包含 ListView、Button、ProgressBar 的复杂界面。
  6. * 2. 状态联动逻辑:实现按钮互斥(执行时禁用添加)、颜色动态切换及透明度反馈。
  7. * 3. 多线程协同:主线程负责 UI 响应,工作线程执行耗时任务并通过 runOnUiThread 安全回更。
  8. * 4. 实时数据同步:顶部状态栏实时显示剩余任务数,进度条下方高亮当前执行项。
  9. * 5. 配置持久化:利用 config 模块保存进度,支持断点续传模拟。
  10. */

  11. // ==================== 全局变量定义 ====================
  12. var ac = null;          // 主窗体对象
  13. var logWindow = null;   // 日志悬浮窗
  14. var taskList = [];      // 任务队列
  15. var isRunning = false;  // 运行状态标志
  16. var progressValue = 0;  // 进度值

  17. // UI 控件引用(全局化以便在线程中访问)
  18. var statusBar, btnStart, btnStop, btnAddTask, progressBar, progressText, currentTaskInfo;

  19. // ==================== 辅助函数(全局作用域) ====================

  20. // 获取已完成任务数
  21. function getCompletedCount() {
  22.     var count = 0;
  23.     for (var i = 0; i < taskList.length; i++) {
  24.         if (taskList[i].status === "已完成") count++;
  25.     }
  26.     return count;
  27. }

  28. // 更新 UI 状态(按钮联动与视觉反馈)
  29. function updateUIState(running) {
  30.     if (!ac) return;
  31.     ac.runOnUiThread(function() {
  32.         try {
  33.             var count = taskList.length;
  34.             var completed = getCompletedCount();
  35.             if (statusBar) statusBar.setText(running ? "执行中... (剩余 " + (count - completed) + ")" : "就绪:剩余 " + count + " 个任务");
  36.             
  37.             // 按钮联动:运行时禁用“开始”和“添加”,启用“停止”
  38.             if (btnStart) {
  39.                 btnStart.setEnabled(!running);
  40.                 btnStart.setAlpha(running ? 0.5 : 1.0); // 禁用时半透明
  41.             }
  42.             if (btnAddTask) {
  43.                 btnAddTask.setEnabled(!running);
  44.                 btnAddTask.setAlpha(running ? 0.5 : 1.0);
  45.             }
  46.             if (btnStop) {
  47.                 btnStop.setEnabled(running);
  48.                 btnStop.setAlpha(1.0);
  49.             }
  50.             
  51.             // 视觉特效:强制设置背景色(比 Tint 更稳定)
  52.             if (running) {
  53.                 if (btnStart) btnStart.setBackgroundColor(android.graphics.Color.parseColor("#CCCCCC")); // 灰色
  54.                 if (btnStop) btnStop.setBackgroundColor(android.graphics.Color.parseColor("#FF0000")); // 鲜红
  55.             } else {
  56.                 if (btnStart) btnStart.setBackgroundColor(android.graphics.Color.parseColor("#4CAF50")); // 绿色
  57.                 if (btnStop) btnStop.setBackgroundColor(android.graphics.Color.parseColor("#F44336")); // 红色
  58.             }
  59.         } catch (e) {
  60.             print.log("UI状态更新异常: " + e.message);
  61.         }
  62.     });
  63. }

  64. // ==================== 初始化函数 ====================
  65. function init() {
  66.     print.log("正在初始化智能任务调度中心...");
  67.    
  68.     // 1. 初始化日志悬浮窗
  69.     initLogWindow();
  70.    
  71.     // 2. 加载历史配置
  72.     loadConfig();
  73.    
  74.     // 3. 创建主控制界面
  75.     createMainUI();
  76.    
  77.     print.log("初始化完成,等待指令。");
  78. }

  79. // ==================== 日志悬浮窗 ====================
  80. function initLogWindow() {
  81.     try {
  82.         logWindow = new floatUI();
  83.         logWindow.loadXML(
  84.             '<LinearLayout orientation="vertical" w="300" h="400" gravity="left">' +
  85.             '  <TextView id="logTitle" text="&#128202; 实时日志" textColor="#FFFFFF" textSize="16" padding="8" background="#333333" />' +
  86.             '  <ScrollView w="match_parent" h="match_parent">' +
  87.             '    <TextView id="logContent" textColor="#00FF00" textSize="12" padding="8" background="#000000" />' +
  88.             '  </ScrollView>' +
  89.             '</LinearLayout>'
  90.         );
  91.         logWindow.setPosition(10, 100);
  92.     } catch (e) {
  93.         print.log("日志悬浮窗初始化失败: " + e.message);
  94.     }
  95. }

  96. function appendLog(msg) {
  97.     if (!logWindow) return;
  98.     var time = new Date().toLocaleTimeString();
  99.     var logMsg = "[" + time + "] " + msg + "\n";
  100.    
  101.     // 在 UI 线程中更新日志内容
  102.     if (ac) {
  103.         ac.runOnUiThread(function() {
  104.             try {
  105.                 var logText = logWindow.findViewById("logContent");
  106.                 if (logText) {
  107.                     var currentText = logText.getText().toString();
  108.                     logText.setText(currentText + logMsg);
  109.                 }
  110.             } catch (e) {}
  111.         });
  112.     }
  113.     print.log(logMsg.trim());
  114. }

  115. // ==================== 主界面构建 ====================
  116. function createMainUI() {
  117.     ac = new activity();
  118.    
  119.     // 复杂的 XML 布局:包含标题、列表、进度条、控制按钮
  120.     ac.loadXML(`
  121.     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  122.         android:layout_width="match_parent"
  123.         android:layout_height="match_parent"
  124.         android:orientation="vertical"
  125.         android:background="#F0F0F0"
  126.         android:padding="16dp">

  127.         <TextView
  128.             android:text="&#128640; 智能任务调度中心"
  129.             android:textSize="24sp"
  130.             android:textColor="#333333"
  131.             android:gravity="center"
  132.             android:layout_marginBottom="20dp" />

  133.         <TextView
  134.             android:id="@+id/statusBar"
  135.             android:text="就绪:等待添加任务"
  136.             android:textSize="14sp"
  137.             android:textColor="#666666"
  138.             android:gravity="center"
  139.             android:layout_marginBottom="10dp" />

  140.         <!-- 任务列表区域 -->
  141.         <ListView
  142.             android:id="@+id/taskListView"
  143.             android:layout_width="match_parent"
  144.             android:layout_height="0dp"
  145.             android:layout_weight="1"
  146.             android:background="#FFFFFF"
  147.             android:divider="#E0E0E0"
  148.             android:dividerHeight="1px" />

  149.         <!-- 进度条 -->
  150.         <ProgressBar
  151.             android:id="@+id/progressBar"
  152.             style="?android:attr/progressBarStyleHorizontal"
  153.             android:layout_width="match_parent"
  154.             android:layout_height="wrap_content"
  155.             android:max="100"
  156.             android:progress="0"
  157.             android:layout_marginTop="10dp" />

  158.         <TextView
  159.             android:id="@+id/progressText"
  160.             android:text="进度: 0%"
  161.             android:gravity="center"
  162.             android:layout_marginTop="5dp" />

  163.         <TextView
  164.             android:id="@+id/currentTaskInfo"
  165.             android:text="当前无正在执行的任务"
  166.             android:textSize="12sp"
  167.             android:textColor="#999999"
  168.             android:gravity="center"
  169.             android:layout_marginTop="5dp" />

  170.         <!-- 控制按钮组 -->
  171.         <LinearLayout
  172.             android:layout_width="match_parent"
  173.             android:layout_height="wrap_content"
  174.             android:orientation="horizontal"
  175.             android:layout_marginTop="20dp">

  176.             <Button
  177.                 android:id="@+id/btnStart"
  178.                 android:text="开始执行"
  179.                 android:layout_width="0dp"
  180.                 android:layout_weight="1"
  181.                 android:layout_marginRight="5dp"
  182.                 android:background="#4CAF50"
  183.                 android:textColor="#FFFFFF" />

  184.             <Button
  185.                 android:id="@+id/btnStop"
  186.                 android:text="停止"
  187.                 android:layout_width="0dp"
  188.                 android:layout_weight="1"
  189.                 android:layout_marginLeft="5dp"
  190.                 android:background="#F44336"
  191.                 android:textColor="#FFFFFF" />
  192.         </LinearLayout>
  193.         
  194.         <Button
  195.             android:id="@+id/btnAddTask"
  196.             android:text="➕ 添加随机任务"
  197.             android:layout_width="match_parent"
  198.             android:layout_height="wrap_content"
  199.             android:layout_marginTop="10dp"
  200.             android:background="#2196F3"
  201.             android:textColor="#FFFFFF" />

  202.     </LinearLayout>
  203.     `);

  204.     // 获取控件引用并赋值给全局变量
  205.     statusBar = ac.findViewById("statusBar");
  206.     btnStart = ac.findViewById("btnStart");
  207.     btnStop = ac.findViewById("btnStop");
  208.     btnAddTask = ac.findViewById("btnAddTask");
  209.     progressBar = ac.findViewById("progressBar");
  210.     progressText = ac.findViewById("progressText");
  211.     currentTaskInfo = ac.findViewById("currentTaskInfo");

  212.     // 绑定事件
  213.     btnStart.setOnClickListener(function() {
  214.         startTasks();
  215.     });

  216.     btnStop.setOnClickListener(function() {
  217.         stopTasks();
  218.     });

  219.     btnAddTask.setOnClickListener(function() {
  220.         addRandomTask();
  221.     });

  222.     // 初始渲染列表
  223.     updateTaskList();
  224.     updateUIState(false); // 初始化按钮状态
  225.     appendLog("主界面已就绪");
  226. }

  227. // ==================== 业务逻辑 ====================

  228. // 模拟任务数据
  229. var taskTemplates = [
  230.     { name: "数据备份", duration: 3000 },
  231.     { name: "图片压缩", duration: 2000 },
  232.     { name: "日志上传", duration: 4000 },
  233.     { name: "缓存清理", duration: 1500 },
  234.     { name: "系统检测", duration: 2500 }
  235. ];

  236. function addRandomTask() {
  237.     var template = taskTemplates[Math.floor(Math.random() * taskTemplates.length)];
  238.     var newTask = {
  239.         id: new Date().getTime(),
  240.         name: template.name + "_" + Math.floor(Math.random() * 100),
  241.         status: "待执行",
  242.         duration: template.duration
  243.     };
  244.     taskList.push(newTask);
  245.     updateTaskList();
  246.     appendLog("添加新任务: " + newTask.name);
  247. }

  248. function updateTaskList() {
  249.     // 在实际 Android 开发中,这里需要适配 ArrayAdapter
  250.     // 由于 AIWROK 的 activity.findViewById 返回的是原生 View,直接操作 ListView 较复杂
  251.     // 此处简化为日志输出,实际项目中可结合 H5 或自定义 Adapter
  252.     appendLog("当前任务队列数量: " + taskList.length);
  253. }

  254. function startTasks() {
  255.     if (isRunning) {
  256.         appendLog("任务已在运行中,请勿重复点击");
  257.         return;
  258.     }

  259.     if (taskList.length === 0) {
  260.         appendLog("任务队列为空,请先添加任务");
  261.         return;
  262.     }

  263.     isRunning = true;
  264.     appendLog(">>> 开始执行任务序列...");
  265.     updateUIState(true); // 触发按钮联动

  266.     // 开启工作线程
  267.     new thread().runJsCode(function fun() {
  268.         var totalTasks = taskList.length;
  269.         var completedTasks = 0;

  270.         for (var i = 0; i < totalTasks; i++) {
  271.             // 【关键点】每次循环前检查是否被要求停止
  272.             if (!isRunning) {
  273.                 appendLog("检测到停止指令,退出任务循环");
  274.                 break;
  275.             }

  276.             var task = taskList[i];
  277.             task.status = "执行中";
  278.             appendLog("正在执行: " + task.name);

  279.             // 模拟耗时操作
  280.             java.lang.Thread.sleep(task.duration);

  281.             task.status = "已完成";
  282.             completedTasks++;
  283.             
  284.             // 计算进度并更新 UI
  285.             var progress = Math.floor((completedTasks / totalTasks) * 100);
  286.             
  287.             // 【关键点】跨线程更新 UI 必须使用 runOnUiThread
  288.             ac.runOnUiThread(function() {
  289.                 try {
  290.                     var progressBar = ac.findViewById("progressBar");
  291.                     var progressText = ac.findViewById("progressText");
  292.                     var currentTaskInfo = ac.findViewById("currentTaskInfo");
  293.                     
  294.                     if (progressBar) progressBar.setProgress(progress);
  295.                     if (progressText) progressText.setText("进度: " + progress + "%");
  296.                     
  297.                     // 视觉特效:更新当前执行项并高亮
  298.                     if (currentTaskInfo) {
  299.                         currentTaskInfo.setText("正在处理: " + task.name);
  300.                         currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#2196F3")); // 蓝色高亮
  301.                     }
  302.                 } catch (e) {}
  303.             });

  304.             // 保存进度到配置,防止意外中断后丢失
  305.             config.setConfig('/sdcard/task_state.ini', 'last_progress', progress.toString());
  306.         }

  307.         isRunning = false;
  308.         appendLog("<<< 所有任务执行完毕");
  309.         
  310.         // 任务完成后重置 UI
  311.         ac.runOnUiThread(function() {
  312.             try {
  313.                 var progressBar = ac.findViewById("progressBar");
  314.                 var currentTaskInfo = ac.findViewById("currentTaskInfo");
  315.                 if (progressBar) progressBar.setProgress(0);
  316.                 if (currentTaskInfo) {
  317.                     currentTaskInfo.setText("当前无正在执行的任务");
  318.                     currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#999999")); // 恢复灰色
  319.                 }
  320.             } catch (e) {}
  321.         });
  322.         
  323.         updateUIState(false); // 恢复按钮状态
  324.     }, "TaskWorkerThread");
  325. }

  326. function stopTasks() {
  327.     if (!isRunning) {
  328.         appendLog("当前没有正在执行的任务");
  329.         return;
  330.     }
  331.     isRunning = false;
  332.     appendLog("!!! 用户已触发停止指令,正在终止...");
  333.    
  334.     // 立即更新 UI 状态,给用户明确的反馈
  335.     ac.runOnUiThread(function() {
  336.         try {
  337.             var progressBar = ac.findViewById("progressBar");
  338.             var currentTaskInfo = ac.findViewById("currentTaskInfo");
  339.             if (progressBar) progressBar.setProgress(0);
  340.             if (currentTaskInfo) {
  341.                 currentTaskInfo.setText("任务已被用户手动停止");
  342.                 currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#FF0000")); // 红色警告
  343.             }
  344.         } catch (e) {}
  345.     });
  346.    
  347.     // 延迟一点再恢复按钮状态,让用户看到“停止”的效果
  348.     java.lang.Thread.sleep(500);
  349.     updateUIState(false);
  350. }

  351. // ==================== 配置持久化 ====================
  352. function loadConfig() {
  353.     try {
  354.         var savedProgress = config.getConfig('/sdcard/task_state.ini', 'last_progress', '0');
  355.         appendLog("加载上次进度: " + savedProgress + "%");
  356.     } catch (e) {
  357.         appendLog("读取配置失败: " + e.message);
  358.     }
  359. }

  360. // ==================== 启动入口 ====================
  361. init();
复制代码



unto苹果脚本找图后Detect对象各种方法演示nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖