|
|
AIWROKʹÓÃactivityÁÐ±í¿ª¹ØÓë½ø¶ÈÌõµÄÐͬ½»»¥
- /**
- * AIWROKʹÓÃactivityÁÐ±í¿ª¹ØÓë½ø¶ÈÌõµÄÐͬ½»»¥
- *
- * ¹¦ÄÜÁÁµã£º
- * 1. ¶¯Ì¬ UI ¹¹½¨£ºÊ¹Óà activity ´´½¨°üº¬ ListView¡¢Button¡¢ProgressBar µÄ¸´ÔÓ½çÃæ¡£
- * 2. ״̬Áª¶¯Âß¼£ºÊµÏÖ°´Å¥»¥³â£¨Ö´ÐÐʱ½ûÓÃÌí¼Ó£©¡¢ÑÕÉ«¶¯Ì¬Çл»¼°Í¸Ã÷¶È·´À¡¡£
- * 3. ¶àÏß³ÌÐͬ£ºÖ÷Ï̸߳ºÔð UI ÏìÓ¦£¬¹¤×÷Ïß³ÌÖ´ÐкÄʱÈÎÎñ²¢Í¨¹ý runOnUiThread °²È«»Ø¸ü¡£
- * 4. ʵʱÊý¾Ýͬ²½£º¶¥²¿×´Ì¬À¸ÊµÊ±ÏÔʾʣÓàÈÎÎñÊý£¬½ø¶ÈÌõÏ·½¸ßÁÁµ±Ç°Ö´ÐÐÏî¡£
- * 5. ÅäÖó־û¯£ºÀûÓà config Ä£¿é±£´æ½ø¶È£¬Ö§³Ö¶ÏµãÐø´«Ä£Äâ¡£
- */
- // ==================== È«¾Ö±äÁ¿¶¨Òå ====================
- var ac = null; // Ö÷´°Ìå¶ÔÏó
- var logWindow = null; // ÈÕÖ¾Ðü¸¡´°
- var taskList = []; // ÈÎÎñ¶ÓÁÐ
- var isRunning = false; // ÔËÐÐ״̬±êÖ¾
- var progressValue = 0; // ½ø¶ÈÖµ
- // UI ¿Ø¼þÒýÓã¨È«¾Ö»¯ÒÔ±ãÔÚÏß³ÌÖзÃÎÊ£©
- var statusBar, btnStart, btnStop, btnAddTask, progressBar, progressText, currentTaskInfo;
- // ==================== ¸¨Öúº¯Êý£¨È«¾Ö×÷ÓÃÓò£© ====================
- // »ñÈ¡ÒÑÍê³ÉÈÎÎñÊý
- function getCompletedCount() {
- var count = 0;
- for (var i = 0; i < taskList.length; i++) {
- if (taskList[i].status === "ÒÑÍê³É") count++;
- }
- return count;
- }
- // ¸üРUI ״̬£¨°´Å¥Áª¶¯ÓëÊÓ¾õ·´À¡£©
- function updateUIState(running) {
- if (!ac) return;
- ac.runOnUiThread(function() {
- try {
- var count = taskList.length;
- var completed = getCompletedCount();
- if (statusBar) statusBar.setText(running ? "Ö´ÐÐÖÐ... (Ê£Óà " + (count - completed) + ")" : "¾ÍÐ÷£ºÊ£Óà " + count + " ¸öÈÎÎñ");
-
- // °´Å¥Áª¶¯£ºÔËÐÐʱ½ûÓá°¿ªÊ¼¡±ºÍ¡°Ìí¼Ó¡±£¬ÆôÓá°Í£Ö¹¡±
- if (btnStart) {
- btnStart.setEnabled(!running);
- btnStart.setAlpha(running ? 0.5 : 1.0); // ½ûÓÃʱ°ë͸Ã÷
- }
- if (btnAddTask) {
- btnAddTask.setEnabled(!running);
- btnAddTask.setAlpha(running ? 0.5 : 1.0);
- }
- if (btnStop) {
- btnStop.setEnabled(running);
- btnStop.setAlpha(1.0);
- }
-
- // ÊÓ¾õÌØÐ§£ºÇ¿ÖÆÉèÖñ³¾°É«£¨±È Tint ¸üÎȶ¨£©
- if (running) {
- if (btnStart) btnStart.setBackgroundColor(android.graphics.Color.parseColor("#CCCCCC")); // »ÒÉ«
- if (btnStop) btnStop.setBackgroundColor(android.graphics.Color.parseColor("#FF0000")); // Ïʺì
- } else {
- if (btnStart) btnStart.setBackgroundColor(android.graphics.Color.parseColor("#4CAF50")); // ÂÌÉ«
- if (btnStop) btnStop.setBackgroundColor(android.graphics.Color.parseColor("#F44336")); // ºìÉ«
- }
- } catch (e) {
- print.log("UI״̬¸üÐÂÒì³£: " + e.message);
- }
- });
- }
- // ==================== ³õʼ»¯º¯Êý ====================
- function init() {
- print.log("ÕýÔÚ³õʼ»¯ÖÇÄÜÈÎÎñµ÷¶ÈÖÐÐÄ...");
-
- // 1. ³õʼ»¯ÈÕÖ¾Ðü¸¡´°
- initLogWindow();
-
- // 2. ¼ÓÔØÀúÊ·ÅäÖÃ
- loadConfig();
-
- // 3. ´´½¨Ö÷¿ØÖƽçÃæ
- createMainUI();
-
- print.log("³õʼ»¯Íê³É£¬µÈ´ýÖ¸Áî¡£");
- }
- // ==================== ÈÕÖ¾Ðü¸¡´° ====================
- function initLogWindow() {
- try {
- logWindow = new floatUI();
- logWindow.loadXML(
- '<LinearLayout orientation="vertical" w="300" h="400" gravity="left">' +
- ' <TextView id="logTitle" text="📊 ʵʱÈÕÖ¾" textColor="#FFFFFF" textSize="16" padding="8" background="#333333" />' +
- ' <ScrollView w="match_parent" h="match_parent">' +
- ' <TextView id="logContent" textColor="#00FF00" textSize="12" padding="8" background="#000000" />' +
- ' </ScrollView>' +
- '</LinearLayout>'
- );
- logWindow.setPosition(10, 100);
- } catch (e) {
- print.log("ÈÕÖ¾Ðü¸¡´°³õʼ»¯Ê§°Ü: " + e.message);
- }
- }
- function appendLog(msg) {
- if (!logWindow) return;
- var time = new Date().toLocaleTimeString();
- var logMsg = "[" + time + "] " + msg + "\n";
-
- // ÔÚ UI Ïß³ÌÖиüÐÂÈÕÖ¾ÄÚÈÝ
- if (ac) {
- ac.runOnUiThread(function() {
- try {
- var logText = logWindow.findViewById("logContent");
- if (logText) {
- var currentText = logText.getText().toString();
- logText.setText(currentText + logMsg);
- }
- } catch (e) {}
- });
- }
- print.log(logMsg.trim());
- }
- // ==================== Ö÷½çÃæ¹¹½¨ ====================
- function createMainUI() {
- ac = new activity();
-
- // ¸´Ô XML ²¼¾Ö£º°üº¬±êÌâ¡¢ÁÐ±í¡¢½ø¶ÈÌõ¡¢¿ØÖư´Å¥
- ac.loadXML(`
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="#F0F0F0"
- android:padding="16dp">
- <TextView
- android:text="🚀 ÖÇÄÜÈÎÎñµ÷¶ÈÖÐÐÄ"
- android:textSize="24sp"
- android:textColor="#333333"
- android:gravity="center"
- android:layout_marginBottom="20dp" />
- <TextView
- android:id="@+id/statusBar"
- android:text="¾ÍÐ÷£ºµÈ´ýÌí¼ÓÈÎÎñ"
- android:textSize="14sp"
- android:textColor="#666666"
- android:gravity="center"
- android:layout_marginBottom="10dp" />
- <!-- ÈÎÎñÁбíÇøÓò -->
- <ListView
- android:id="@+id/taskListView"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:background="#FFFFFF"
- android:divider="#E0E0E0"
- android:dividerHeight="1px" />
- <!-- ½ø¶ÈÌõ -->
- <ProgressBar
- android:id="@+id/progressBar"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:max="100"
- android:progress="0"
- android:layout_marginTop="10dp" />
- <TextView
- android:id="@+id/progressText"
- android:text="½ø¶È: 0%"
- android:gravity="center"
- android:layout_marginTop="5dp" />
- <TextView
- android:id="@+id/currentTaskInfo"
- android:text="µ±Ç°ÎÞÕýÔÚÖ´ÐеÄÈÎÎñ"
- android:textSize="12sp"
- android:textColor="#999999"
- android:gravity="center"
- android:layout_marginTop="5dp" />
- <!-- ¿ØÖư´Å¥×é -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_marginTop="20dp">
- <Button
- android:id="@+id/btnStart"
- android:text="¿ªÊ¼Ö´ÐÐ"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_marginRight="5dp"
- android:background="#4CAF50"
- android:textColor="#FFFFFF" />
- <Button
- android:id="@+id/btnStop"
- android:text="Í£Ö¹"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_marginLeft="5dp"
- android:background="#F44336"
- android:textColor="#FFFFFF" />
- </LinearLayout>
-
- <Button
- android:id="@+id/btnAddTask"
- android:text="➕ Ìí¼ÓËæ»úÈÎÎñ"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dp"
- android:background="#2196F3"
- android:textColor="#FFFFFF" />
- </LinearLayout>
- `);
- // »ñÈ¡¿Ø¼þÒýÓò¢¸³Öµ¸øÈ«¾Ö±äÁ¿
- statusBar = ac.findViewById("statusBar");
- btnStart = ac.findViewById("btnStart");
- btnStop = ac.findViewById("btnStop");
- btnAddTask = ac.findViewById("btnAddTask");
- progressBar = ac.findViewById("progressBar");
- progressText = ac.findViewById("progressText");
- currentTaskInfo = ac.findViewById("currentTaskInfo");
- // °ó¶¨Ê¼þ
- btnStart.setOnClickListener(function() {
- startTasks();
- });
- btnStop.setOnClickListener(function() {
- stopTasks();
- });
- btnAddTask.setOnClickListener(function() {
- addRandomTask();
- });
- // ³õʼäÖȾÁбí
- updateTaskList();
- updateUIState(false); // ³õʼ»¯°´Å¥×´Ì¬
- appendLog("Ö÷½çÃæÒѾÍÐ÷");
- }
- // ==================== ÒµÎñÂß¼ ====================
- // Ä£ÄâÈÎÎñÊý¾Ý
- var taskTemplates = [
- { name: "Êý¾Ý±¸·Ý", duration: 3000 },
- { name: "ͼƬѹËõ", duration: 2000 },
- { name: "ÈÕÖ¾ÉÏ´«", duration: 4000 },
- { name: "»º´æÇåÀí", duration: 1500 },
- { name: "ϵͳ¼ì²â", duration: 2500 }
- ];
- function addRandomTask() {
- var template = taskTemplates[Math.floor(Math.random() * taskTemplates.length)];
- var newTask = {
- id: new Date().getTime(),
- name: template.name + "_" + Math.floor(Math.random() * 100),
- status: "´ýÖ´ÐÐ",
- duration: template.duration
- };
- taskList.push(newTask);
- updateTaskList();
- appendLog("Ìí¼ÓÐÂÈÎÎñ: " + newTask.name);
- }
- function updateTaskList() {
- // ÔÚʵ¼Ê Android ¿ª·¢ÖУ¬ÕâÀïÐèÒªÊÊÅä ArrayAdapter
- // ÓÉÓÚ AIWROK µÄ activity.findViewById ·µ»ØµÄÊÇÔÉú View£¬Ö±½Ó²Ù×÷ ListView ½Ï¸´ÔÓ
- // ´Ë´¦¼ò»¯ÎªÈÕÖ¾Êä³ö£¬Êµ¼ÊÏîÄ¿ÖпɽáºÏ H5 »ò×Ô¶¨Òå Adapter
- appendLog("µ±Ç°ÈÎÎñ¶ÓÁÐÊýÁ¿: " + taskList.length);
- }
- function startTasks() {
- if (isRunning) {
- appendLog("ÈÎÎñÒÑÔÚÔËÐÐÖУ¬ÇëÎðÖØ¸´µã»÷");
- return;
- }
- if (taskList.length === 0) {
- appendLog("ÈÎÎñ¶ÓÁÐΪ¿Õ£¬ÇëÏÈÌí¼ÓÈÎÎñ");
- return;
- }
- isRunning = true;
- appendLog(">>> ¿ªÊ¼Ö´ÐÐÈÎÎñÐòÁÐ...");
- updateUIState(true); // ´¥·¢°´Å¥Áª¶¯
- // ¿ªÆô¹¤×÷Ïß³Ì
- new thread().runJsCode(function fun() {
- var totalTasks = taskList.length;
- var completedTasks = 0;
- for (var i = 0; i < totalTasks; i++) {
- // ¡¾¹Ø¼üµã¡¿Ã¿´ÎÑ»·Ç°¼ì²éÊÇ·ñ±»ÒªÇóÍ£Ö¹
- if (!isRunning) {
- appendLog("¼ì²âµ½Í£Ö¹Ö¸ÁÍ˳öÈÎÎñÑ»·");
- break;
- }
- var task = taskList[i];
- task.status = "Ö´ÐÐÖÐ";
- appendLog("ÕýÔÚÖ´ÐÐ: " + task.name);
- // Ä£ÄâºÄʱ²Ù×÷
- java.lang.Thread.sleep(task.duration);
- task.status = "ÒÑÍê³É";
- completedTasks++;
-
- // ¼ÆËã½ø¶È²¢¸üРUI
- var progress = Math.floor((completedTasks / totalTasks) * 100);
-
- // ¡¾¹Ø¼üµã¡¿¿çÏ̸߳üРUI ±ØÐëʹÓà runOnUiThread
- ac.runOnUiThread(function() {
- try {
- var progressBar = ac.findViewById("progressBar");
- var progressText = ac.findViewById("progressText");
- var currentTaskInfo = ac.findViewById("currentTaskInfo");
-
- if (progressBar) progressBar.setProgress(progress);
- if (progressText) progressText.setText("½ø¶È: " + progress + "%");
-
- // ÊÓ¾õÌØÐ§£º¸üе±Ç°Ö´ÐÐÏî²¢¸ßÁÁ
- if (currentTaskInfo) {
- currentTaskInfo.setText("ÕýÔÚ´¦Àí: " + task.name);
- currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#2196F3")); // À¶É«¸ßÁÁ
- }
- } catch (e) {}
- });
- // ±£´æ½ø¶Èµ½ÅäÖ㬷ÀÖ¹ÒâÍâÖжϺó¶ªÊ§
- config.setConfig('/sdcard/task_state.ini', 'last_progress', progress.toString());
- }
- isRunning = false;
- appendLog("<<< ËùÓÐÈÎÎñÖ´ÐÐÍê±Ï");
-
- // ÈÎÎñÍê³ÉºóÖØÖà UI
- ac.runOnUiThread(function() {
- try {
- var progressBar = ac.findViewById("progressBar");
- var currentTaskInfo = ac.findViewById("currentTaskInfo");
- if (progressBar) progressBar.setProgress(0);
- if (currentTaskInfo) {
- currentTaskInfo.setText("µ±Ç°ÎÞÕýÔÚÖ´ÐеÄÈÎÎñ");
- currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#999999")); // »Ö¸´»ÒÉ«
- }
- } catch (e) {}
- });
-
- updateUIState(false); // »Ö¸´°´Å¥×´Ì¬
- }, "TaskWorkerThread");
- }
- function stopTasks() {
- if (!isRunning) {
- appendLog("µ±Ç°Ã»ÓÐÕýÔÚÖ´ÐеÄÈÎÎñ");
- return;
- }
- isRunning = false;
- appendLog("!!! Óû§ÒÑ´¥·¢Í£Ö¹Ö¸ÁÕýÔÚÖÕÖ¹...");
-
- // Á¢¼´¸üРUI ״̬£¬¸øÓû§Ã÷È·µÄ·´À¡
- ac.runOnUiThread(function() {
- try {
- var progressBar = ac.findViewById("progressBar");
- var currentTaskInfo = ac.findViewById("currentTaskInfo");
- if (progressBar) progressBar.setProgress(0);
- if (currentTaskInfo) {
- currentTaskInfo.setText("ÈÎÎñÒѱ»Óû§ÊÖ¶¯Í£Ö¹");
- currentTaskInfo.setTextColor(android.graphics.Color.parseColor("#FF0000")); // ºìÉ«¾¯¸æ
- }
- } catch (e) {}
- });
-
- // ÑÓ³ÙÒ»µãÔÙ»Ö¸´°´Å¥×´Ì¬£¬ÈÃÓû§¿´µ½¡°Í£Ö¹¡±µÄЧ¹û
- java.lang.Thread.sleep(500);
- updateUIState(false);
- }
- // ==================== ÅäÖó־û¯ ====================
- function loadConfig() {
- try {
- var savedProgress = config.getConfig('/sdcard/task_state.ini', 'last_progress', '0');
- appendLog("¼ÓÔØÉϴνø¶È: " + savedProgress + "%");
- } catch (e) {
- appendLog("¶ÁÈ¡ÅäÖÃʧ°Ü: " + e.message);
- }
- }
- // ==================== Æô¶¯Èë¿Ú ====================
- init();
¸´ÖÆ´úÂë
|
|