|
|
Ðü¸¡´°¿ØÖÆÌ¨floatUI ¿ÉÍ϶¯Ðü¸¡´° + °´Å¥¿ØÖÆ
- /* =============================================================================
- AIWROK ¼¼ÇÉÏîÄ¿ 04 ¡ª¡ª Ðü¸¡´°¿ØÖÆÌ¨£¨floatUI ¿ÉÍ϶¯Ðü¸¡´° + °´Å¥¿ØÖÆ£©
- ×÷ÓÃ
- ©¤©¤©¤©¤
- Ò»¸öÄÜÍ϶¯¡¢Äܵ㰴ťµÄÐü¸¡Ð¡´°£¬Æ®ÔÚÆÁÄ»×îÉϲ㣺
- ▶Æô¶¯ / ⏸ÔÝÍ£ / ▶»Ö¸´ / ⏹Í£Ö¹ / ÊÕÆðÕ¹¿ª / ✖¹Ø±Õ£¬
- ºǫ́Òì²½ÅܶàÏß³ÌÈÎÎñ£¬´°¿ÚʵʱÏÔʾ״̬¡£
- Õâ¸öÏîÄ¿ÑÝʾµÄÌØÊâ¼¼ÇÉ
- ©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤©¤
- 1. floatUI Ðü¸¡´°£ºloadXML ¼ÓÔØ²¼¾Ö¡¢findViewById Äÿؼþ¡¢setPosition ¶¨Î»
- 2. Í϶¯ÊÖÊÆ£º¸ø±êÌâÀ¸¹Ò OnTouchListener£¬Óà MotionEvent µÄ ACTION_DOWN/MOVE/UP
- + getRawX/getRawY ËãÎ»ÒÆ
- ⚠ Õæ»úʵ²â¿Ó£ºÖ±½Óд new View.OnTouchListener(...) »á´òÓ¡"µ±Ç°»·¾³²»Ö§³ÖÍÏ×§"£¬
- ÒòΪ¶ÌÀàÃû View / MotionEvent ²¢²»ÊÇÈ«¾Ö¿ÉÓõġ£
- Õýȷд·¨£ºÏÈ importClass(android.view.View) / importClass(android.view.MotionEvent)£¬
- »òÓÃÈ«ÀàÃû android.view.View.OnTouchListener¡¢android.view.MotionEvent.ACTION_MOVE¡£
- ±¾½Å±¾Á½Õß¶¼×öÁË£¨resolveView / resolveMotionEvent£©£¬Íϲ»¶¯Ê±»¹ÄÜ"µã±êÌâÀ¸»»Î»"¶µµ×¡£
- 3. °´Å¥»Øµ÷£º¿Ø¼þ.setOnClickListener(function(){...})
- 4. ÕÛµþ£ºView.GONE / View.VISIBLE ¿ØÖÆÖ÷ÌåÏÔÒþ£¨»·¾³²»Ö§³Öʱ»á×Ô¶¯½µ¼¶£©
- 5. ¹Ø±Õ£ºui.close()£¬Í¬Ê±°ÑÏß³ÌÍ£µô£¬²»Áôºǫ́ҰÏß³Ì
- 6. µã»÷È¥ÖØ£ºÕæ»úÉÏÒ»´Îµã»÷¿ÉÄܱ»ÅÉ·¢¶à´Î£¨ÈÕÖ¾ÀïË¢ 3 Ìõ"⏹ ÒÑÍ£Ö¹"¾ÍÊÇÕâ¸öÔÒò£©£¬
- ËùÒÔÃüÁîÒª ¢Ù 300ms ͬÃüÁîÈ¥ÖØ ¢Ú ³ØÄÚ·½·¨×ÔÉíÃݵȣ¬Ë«±£ÏÕ¡£
- ×¢Òâ
- ©¤©¤©¤©¤
- ±¾ÏîÄ¿µÄÐü¸¡´°¾ÍÊÇ"¿ØÖÆÌ¨"±¾Éí£¬²»ÊÇ×Ô¶¯µ¯³öÀ´Ë¢ÆÁµÄÈÕÖ¾´°¡£
- ½Å±¾ÀïûÓжîÍⵯÈÕÖ¾´°£¬È«²¿ÈÕÖ¾×ß printl Êä³öµ½ IDE¡£
- ============================================================================= */
- new floatUI().hideSystemFloat();//Òþ²Øaiworkϵͳ×Ô´øµÄÐü¸¡Í¼±ê
- var CFG = {
- workerCount: 3,
- taskCount: 15, // ÿÂÖÈÎÎñÊý£¨ÖØÆôʱ×Ô¶¯ÖØÐÂ×°Ì
- posX: 40, posY: 220, // Ðü¸¡´°³õʼλÖÃ
- cmdDebounce: 300 // ͬһÃüÁî 300ms ÄÚµÄÖØ¸´µã»÷Ö±½ÓºöÂÔ
- };
- // ============================== Java ÀർÈ루ÍÏ×§±ØÐ裩 ==============================
- // ¿Ó£ºÖ±½Óд new View.OnTouchListener(...) »á±¨"²»Ö§³ÖÍÏ×§"£¬
- // ÒòΪ¶ÌÀàÃû View / MotionEvent ²¢²»ÊÇÈ«¾Ö¿ÉÓõ쬱ØÐëÏÈ importClass¡£
- try { importClass(android.view.View); } catch (e) {}
- try { importClass(android.view.MotionEvent); } catch (e) {}
- /** È¡ View Àࣺ¶ÌÃû ¡ú È«ÀàÃû ¡ú null */
- function resolveView() {
- if (typeof View !== 'undefined' && View) return View;
- try { if (android && android.view && android.view.View) return android.view.View; } catch (e) {}
- return null;
- }
- /** È¡ MotionEvent Àࣺ¶ÌÃû ¡ú È«ÀàÃû ¡ú null */
- function resolveMotionEvent() {
- if (typeof MotionEvent !== 'undefined' && MotionEvent) return MotionEvent;
- try { if (android && android.view && android.view.MotionEvent) return android.view.MotionEvent; } catch (e) {}
- return null;
- }
- var ui = null; // floatUI ʵÀý
- var ctrls = {}; // ¿Ø¼þÒýÓÃ
- var screenW = 1080, screenH = 1920;
- var dragLastX = 0, dragLastY = 0, dragging = false;
- var expanded = true;
- var winX = CFG.posX, winY = CFG.posY;
- var dragEnabled = false; // ÍÏ×§ÊÇ·ñÕæµÄ°óÉÏÁË
- var lastCmd = { name: '', t: 0 };
- // ============================== ¹¤¾ß ==============================
- function log(m) { try { printl(m); } catch (e) {} }
- function sleepMs(ms) { try { java.lang.Thread.sleep(ms); } catch (e) {} }
- function nowMs() { return java.lang.System.currentTimeMillis(); }
- function getScreenSize() {
- try {
- var m = context.getResources().getDisplayMetrics();
- if (m && m.widthPixels) { screenW = m.widthPixels; screenH = m.heightPixels; }
- } catch (e) {
- try { screenW = screen.getScreenWidth(); screenH = screen.getScreenHeight(); } catch (e2) {}
- }
- log('ÆÁÄ»³ß´ç: ' + screenW + ' x ' + screenH);
- }
- // ============================== ºǫ́ÈÎÎñ³Ø£¨¾«¼ò°æ£© ==============================
- function MiniPool(workerCount) {
- var workerN = workerCount || 3;
- var workers = [], queue = [], lock = false;
- var running = false, paused = false, accepting = true;
- var active = 0, total = 0, done = 0, failed = 0;
- var exited = 0; // ÒÑ×ÔÈ»Í˳öµÄÏß³ÌÊý
- function section(fn) {
- var g = 0;
- while (lock && g < 3000) { sleepMs(2); g++; }
- lock = true;
- try { return fn(); } finally { lock = false; }
- }
- function take() {
- var t = null;
- section(function () { if (queue.length > 0) { t = queue.shift(); active++; } });
- return t;
- }
- function loop(idx) {
- while (running) {
- if (paused) { sleepMs(120); continue; }
- var task = take();
- if (task == null) {
- if (!accepting && queue.length === 0) break;
- sleepMs(60);
- continue;
- }
- var ok = true, err = '';
- try { task.fn('T' + idx); } catch (e) { ok = false; err = String(e); }
- section(function () { active--; if (ok) done++; else failed++; });
- consoleLog((ok ? '✔ ' : '✘ ') + 'T' + idx + ' ' + task.name + (ok ? '' : ' ' + err));
- }
- // ¹Ø¼ü£ºÏß³Ì×ÔÈ»ÅÜÍêÍ˳öʱ£¬Òª°Ñ³Ø×Ó״̬¹éλ£»
- // ·ñÔò running Ò»Ö±ÊÇ true£¬ÈÎÎñÅÜÍêºóÔٵ㡾Æô¶¯¡¿»á±»µ±³É"ÒÑÔÚÔËÐÐ"¶ø¿Õת¡£
- section(function () {
- exited++;
- if (exited >= workerN) { running = false; paused = false; accepting = true; }
- });
- }
- this.add = function (name, fn) { section(function () { queue.push({ name: name, fn: fn }); total++; }); return this; };
- /** ±¾ÂÖÊÇ·ñÒÑÅÜÍê */
- this.isFinished = function () { return total > 0 && (done + failed) >= total; };
- /** Çå¿Õ¶ÓÁÐÓë¼ÆÊý£¨Ö»ÄÜÔÚûÓÐÏß³ÌÔËÐÐʱµ÷Óã© */
- this.reset = function () {
- if (running || active > 0) return false;
- section(function () {
- queue = []; total = 0; done = 0; failed = 0; exited = 0; accepting = true; paused = false;
- });
- return true;
- };
- // ËùÓпØÖÆ·½·¨¶¼ÒªÃݵȣºÖظ´µã»÷Ö»Ìáʾ¡¢²»Öظ´Ö´ÐС¢²»Öظ´´òÈÕÖ¾
- this.start = function () {
- if (running) { consoleLog('¡¤ ÒѾÔÚÔËÐÐÁË'); return false; }
- if (queue.length === 0) { consoleLog('¡¤ ¶ÓÁÐÊǿյģ¬ÏÈ×°ÈÎÎñ'); return false; }
- running = true; paused = false; accepting = true; exited = 0;
- for (var i = 0; i < workerN; i++) {
- var th = new thread();
- workers.push(th);
- (function (n) { th.runJsCode(function () { loop(n); }, 'Ðü¸¡Ì¨Ïß³Ì' + n); })(i + 1);
- sleepMs(140);
- }
- consoleLog('▶ ÒÑÆô¶¯ ' + workerN + ' ¸öÏß³Ì');
- return true;
- };
- this.pause = function () {
- if (!running) { consoleLog('¡¤ ûÔÚÔËÐУ¬²»ÓÃÔÝÍ£'); return false; }
- if (paused) { consoleLog('¡¤ ÒѾÊÇÔÝͣ״̬'); return false; }
- paused = true;
- consoleLog('⏸ ÒÑÔÝÍ£');
- return true;
- };
- this.resume = function () {
- if (!paused) { consoleLog('¡¤ µ±Ç°²»ÊÇÔÝͣ״̬'); return false; }
- paused = false;
- consoleLog('▶ Òѻָ´');
- return true;
- };
- this.stop = function () {
- // ÃݵȣºÈ·ÊµÃ»¶«Î÷ÔÚÅܾÍʲô¶¼²»×ö£¨"⏹ ÒÑÍ£Ö¹"Ë¢ 3 Ìõ¾ÍÊÇÕâôÀ´µÄ£©
- var inf = this.info();
- if (!inf.running && inf.alive === 0 && inf.active === 0) {
- consoleLog('¡¤ ÒѾֹͣÁË');
- return false;
- }
- accepting = false; running = false; paused = false;
- for (var i = 0; i < workers.length; i++) {
- try { if (workers[i].isAlive()) workers[i].stop(); } catch (e) {}
- }
- exited = 0;
- consoleLog('⏹ ÒÑÍ£Ö¹');
- return true;
- };
- this.info = function () {
- var a = 0;
- for (var i = 0; i < workers.length; i++) { try { if (workers[i].isAlive()) a++; } catch (e) {} }
- return { total: total, done: done, failed: failed, queue: queue.length, active: active, alive: a, paused: paused, running: running };
- };
- }
- var pool = null;
- // ============================== ´°¿ÚÄÚµÄ״̬ÏÔʾ ==============================
- var consoleLines = [];
- function consoleLog(text) {
- var n = new Date();
- var t = ('0' + n.getHours()).slice(-2) + ':' + ('0' + n.getMinutes()).slice(-2) + ':' + ('0' + n.getSeconds()).slice(-2);
- consoleLines.unshift('[' + t + '] ' + text);
- if (consoleLines.length > 4) consoleLines = consoleLines.slice(0, 4);
- log(text);
- // ×¢Ò⣺ÕâÀï²»Ö±½ÓË¢¿Ø¼þ¡£¿Ø¼þ¸üÐÂͳһ·Åµ½Ö÷Ïß³ÌÐÄÌøÀï×ö£¬
- // ±ÜÃ⹤×÷Ïß³ÌÖ±½Ó²Ù×÷ UI ´¥·¢ Android µÄ "only the original thread can touch its views" Òì³£¡£
- }
- function renderConsole() {
- try {
- if (ctrls.log) ctrls.log.setText(consoleLines.join('\n'));
- } catch (e) {}
- }
- function refreshStatus() {
- if (!pool) return;
- var i = pool.info();
- var pct = i.total > 0 ? Math.floor((i.done + i.failed) * 100 / i.total) : 0;
- var txt = '½ø¶È ' + pct + '% ✔' + i.done + ' ✘' + i.failed +
- ' ¶ÓÁÐ' + i.queue + ' Ïß³Ì' + i.alive;
- try { if (ctrls.status) ctrls.status.setText(txt); } catch (e) {}
- }
- // ============================== ¸¡¶¯´°¿Ú ==============================
- function buildXml() {
- return '' +
- '<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ' +
- ' android:id="box" android:layout_width="230dp" android:layout_height="wrap_content" ' +
- ' android:orientation="vertical" android:background="#E6111A2B" android:padding="6dp">' +
- ' <LinearLayout android:id="title" android:layout_width="match_parent" ' +
- ' android:layout_height="34dp" android:orientation="horizontal" android:gravity="center_vertical" ' +
- ' android:background="#1F2A44">' +
- ' <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" ' +
- ' android:text="✥" android:textColor="#8FA3C8" android:textSize="15sp" android:paddingLeft="6dp" android:paddingRight="6dp"/>' +
- ' <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" ' +
- ' android:text="AIWROK ¿ØÖÆÌ¨" android:textColor="#FFFFFF" android:textSize="13sp"/>' +
- ' <Button android:id="btnFold" android:layout_width="34dp" android:layout_height="28dp" ' +
- ' android:text="£" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#334155" android:padding="0dp"/>' +
- ' <Button android:id="btnClose" android:layout_width="34dp" android:layout_height="28dp" ' +
- ' android:text="✕" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#EF4444" android:padding="0dp"/>' +
- ' </LinearLayout>' +
- ' <LinearLayout android:id="body" android:layout_width="match_parent" ' +
- ' android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="6dp">' +
- ' <TextView android:id="status" android:layout_width="match_parent" android:layout_height="wrap_content" ' +
- ' android:text="½ø¶È 0% ✔0 ✘0 ¶ÓÁÐ0 Ïß³Ì0" android:textColor="#60A5FA" android:textSize="11sp" android:paddingBottom="6dp"/>' +
- ' <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" ' +
- ' android:orientation="horizontal">' +
- ' <Button android:id="btnStart" android:layout_width="0dp" android:layout_weight="1" ' +
- ' android:layout_height="36dp" android:text="▶ Æô¶¯" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#16A34A" android:padding="0dp"/>' +
- ' <Button android:id="btnPause" android:layout_width="0dp" android:layout_weight="1" ' +
- ' android:layout_height="36dp" android:text="⏸ ÔÝÍ£" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#D97706" android:padding="0dp"/>' +
- ' </LinearLayout>' +
- ' <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" ' +
- ' android:orientation="horizontal" android:paddingTop="4dp">' +
- ' <Button android:id="btnResume" android:layout_width="0dp" android:layout_weight="1" ' +
- ' android:layout_height="36dp" android:text="▶ »Ö¸´" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#2563EB" android:padding="0dp"/>' +
- ' <Button android:id="btnStop" android:layout_width="0dp" android:layout_weight="1" ' +
- ' android:layout_height="36dp" android:text="⏹ Í£Ö¹" android:textColor="#FFFFFF" android:textSize="12sp" android:background="#B91C1C" android:padding="0dp"/>' +
- ' </LinearLayout>' +
- ' <TextView android:id="log" android:layout_width="match_parent" android:layout_height="wrap_content" ' +
- ' android:text="" android:textColor="#86EFAC" android:textSize="10sp" android:paddingTop="6dp"/>' +
- ' </LinearLayout>' +
- '</LinearLayout>';
- }
- function moveTo(x, y) {
- if (x < 0) x = 0;
- if (y < 0) y = 0;
- if (x > screenW - 120) x = screenW - 120;
- if (y > screenH - 80) y = screenH - 80;
- winX = x; winY = y;
- try { ui.setPosition(x, y); } catch (e) {}
- }
- /** °ó¶¨ÍÏ×§¡£É豸ʵ²â£º¶ÌÀàÃû View/MotionEvent ²»´æÔÚ ¡ú ±ØÐëÓà importClass ºóµÄÀà */
- function setupDrag() {
- var V = resolveView();
- var M = resolveMotionEvent();
- if (!V || !M || !ctrls.title || !ctrls.title.setOnTouchListener) {
- log('⚠ ÍÏ×§²»¿ÉÓã¨È± ' + (V ? '' : 'View ') + (M ? '' : 'MotionEvent') + '£©£¬¸ÄÓá¾µã±êÌâÀ¸»»Î»¡¿');
- bindTitleTapToMove();
- return false;
- }
- try {
- ctrls.title.setOnTouchListener(new V.OnTouchListener({
- onTouch: function (view, event) {
- try {
- switch (event.getAction()) {
- case M.ACTION_DOWN:
- dragging = true;
- dragLastX = event.getRawX();
- dragLastY = event.getRawY();
- break;
- case M.ACTION_MOVE:
- if (dragging) {
- var dx = event.getRawX() - dragLastX;
- var dy = event.getRawY() - dragLastY;
- moveTo(winX + dx, winY + dy);
- dragLastX = event.getRawX();
- dragLastY = event.getRawY();
- }
- break;
- case M.ACTION_UP:
- dragging = false;
- break;
- }
- return true;
- } catch (e2) { return false; }
- }
- }));
- dragEnabled = true;
- log('✔ ÍÏ×§ÒѰ󶨣º°´×¡±êÌâÀ¸¿ÉÒÆ¶¯´°¿Ú');
- return true;
- } catch (e) {
- log('⚠ ÍÏ×§°ó¶¨Ê§°Ü: ' + e);
- bindTitleTapToMove();
- return false;
- }
- }
- /** ÍÏ×§²»¿ÉÓÃʱµÄ¶µµ×£ºµãһϱêÌâÀ¸£¬ÔÚ¼¸¸öÔ¤ÉèλÖüäÑ»· */
- var presetIdx = -1;
- function bindTitleTapToMove() {
- if (!ctrls.title || !ctrls.title.setOnClickListener) return;
- try {
- ctrls.title.setOnClickListener(function () {
- var presets = [
- [20, 160], [Math.floor(screenW * 0.5) - 115, 160],
- [screenW - 250, 160], [screenW - 250, Math.floor(screenH * 0.5)],
- [20, Math.floor(screenH * 0.6)]
- ];
- presetIdx = (presetIdx + 1) % presets.length;
- moveTo(presets[presetIdx][0], presets[presetIdx][1]);
- log('↔ ´°¿ÚÒÑ»»Î»µ½µÚ ' + (presetIdx + 1) + ' ¸öλÖÃ');
- });
- } catch (e) {}
- }
- function toggleFold() {
- expanded = !expanded;
- var V = resolveView();
- try {
- if (V && V.GONE !== undefined && ctrls.body && ctrls.body.setVisibility) {
- ctrls.body.setVisibility(expanded ? V.VISIBLE : V.GONE);
- log(expanded ? '🔼 ÒÑÕ¹¿ª' : '🔽 ÒÑÊÕÆð');
- return true;
- }
- } catch (e) {}
- expanded = true;
- log('⚠ µ±Ç°»·¾³²»Ö§³ÖÕÛµþ£¬´°¿Ú±£³ÖÕ¹¿ª');
- return false;
- }
- function closeConsole() {
- log('✖ ¹Ø±Õ¿ØÖÆÌ¨');
- try { pool.stop(); } catch (e) {}
- try { ui.close(); } catch (e) { log('¹Ø±ÕÐü¸¡´°Ê§°Ü: ' + e); }
- alive = false;
- }
- // ============================== ÃüÁî·Ö·¢£¨È¥ÖØ + Á¢¼´Ë¢½çÃæ£© ==============================
- // ʵ²â·¢ÏÖ£ºÒ»´Îµã»÷¿ÉÄܱ»ÅÉ·¢¶à´Î£¨3 ÌõһģһÑùµÄ"ÒÑÍ£Ö¹"¾ÍÊÇÕâôÀ´µÄ£©¡£
- // Ë«±£ÏÕ£º¢Ù ͬһÃüÁî 300ms ÄÚÖ»ÈϵÚÒ»´Î£»¢Ú MiniPool ÄÚ²¿¸÷·½·¨±¾ÉíÃݵȡ£
- function onceCmd(name) {
- var t = nowMs();
- if (name === lastCmd.name && t - lastCmd.t < CFG.cmdDebounce) return false;
- lastCmd = { name: name, t: t };
- return true;
- }
- /** °´Å¥»Øµ÷ÅÜÔÚ UI Ị̈߳¬ÕâÀïÖ±½ÓË¢¿Ø¼þÊǰ²È«µÄ£¬µãÍêÁ¢¿ÌÄÜ¿´µ½±ä»¯ */
- function afterCmd() {
- refreshStatus();
- renderConsole();
- }
- function cmdStart() {
- if (!onceCmd('start')) return;
- if (pool.isFinished()) { // ÉÏÒ»ÂÖÒÑÅÜÍê ¡ú ×Ô¶¯ÖØÐÂ×°Ì±ÜÃâ"ÖØÆô¿ÕÅÜ"
- pool.reset();
- refillTasks();
- consoleLog('🔄 ÒÑÖØÐÂ×°Ìî ' + CFG.taskCount + ' ¸öÈÎÎñ');
- }
- pool.start();
- afterCmd();
- }
- function cmdPause() { if (!onceCmd('pause')) return; pool.pause(); afterCmd(); }
- function cmdResume() { if (!onceCmd('resume')) return; pool.resume(); afterCmd(); }
- function cmdStop() { if (!onceCmd('stop')) return; pool.stop(); afterCmd(); }
- function cmdFold() { if (!onceCmd('fold')) return; toggleFold(); afterCmd(); }
- function cmdClose() { if (!onceCmd('close')) return; closeConsole(); }
- // ============================== ½çÃæ×°Åä ==============================
- var alive = true;
- function createConsole() {
- getScreenSize();
- ui = new floatUI();
- ui.loadXML(buildXml());
- ctrls.title = ui.findViewById('title');
- ctrls.body = ui.findViewById('body');
- ctrls.status = ui.findViewById('status');
- ctrls.log = ui.findViewById('log');
- ctrls.btnStart = ui.findViewById('btnStart');
- ctrls.btnPause = ui.findViewById('btnPause');
- ctrls.btnResume = ui.findViewById('btnResume');
- ctrls.btnStop = ui.findViewById('btnStop');
- ctrls.btnFold = ui.findViewById('btnFold');
- ctrls.btnClose = ui.findViewById('btnClose');
- if (!ctrls.btnStart) { log('✘ Ðü¸¡´°¿Ø¼þδȡµ½£¬É豸¿ÉÄܲ»Ö§³Ö floatUI'); return false; }
- // °´Å¥Ê¼þ£¨Í³Ò»×ß cmd* ·Ö·¢Æ÷£º´øÈ¥ÖØ + ÃÝµÈ + Á¢¼´Ë¢½çÃæ£©
- ctrls.btnStart.setOnClickListener(function () { try { cmdStart(); } catch (e) { log('Æô¶¯Ê§°Ü: ' + e); } });
- ctrls.btnPause.setOnClickListener(function () { try { cmdPause(); } catch (e) {} });
- ctrls.btnResume.setOnClickListener(function () { try { cmdResume(); } catch (e) {} });
- ctrls.btnStop.setOnClickListener(function () { try { cmdStop(); } catch (e) {} });
- ctrls.btnFold.setOnClickListener(function () { try { cmdFold(); } catch (e) {} });
- ctrls.btnClose.setOnClickListener(function () { try { cmdClose(); } catch (e) {} });
- setupDrag();
- moveTo(CFG.posX, CFG.posY);
- consoleLog('¿ØÖÆÌ¨¾ÍÐ÷£¬µã¡¾▶ Æô¶¯¡¿ÅÜÈÎÎñ');
- return true;
- }
- // ============================== ÈÎÎñÓëÐÄÌø ==============================
- function buildTask(idx) {
- return function (tag) {
- sleepMs(rand.randNumber(400, 1200));
- if (idx % 8 === 0) throw new Error('µÚ' + idx + '¸öÈÎÎñÒì³£');
- };
- }
- /** ×°ÌîÒ»ÂÖÈÎÎñ */
- function refillTasks() {
- for (var i = 1; i <= CFG.taskCount; i++) pool.add('ÈÎÎñ' + i, buildTask(i));
- }
- /** ÐÄÌø£¨ÅÜÔÚÖ÷Ị̈߳©£ºË¢Ð´°¿Ú״̬ + ¸øÖ÷Ï̱߳£»î */
- function heartbeat() {
- if (!alive) { log('ÐÄÌø½áÊø£¬Ö÷Ïß³ÌÍ˳ö'); return; }
- refreshStatus();
- renderConsole();
- runTime.setTimeout(heartbeat, 1000);
- }
- // ============================== Èë¿Ú ==============================
- function main() {
- log('¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T');
- log(' Ðü¸¡´°¿ØÖÆÌ¨£¨floatUI£©');
- log('¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T¨T');
- pool = new MiniPool(CFG.workerCount);
- refillTasks();
- if (!createConsole()) return;
- heartbeat();
- log(dragEnabled ? '👉 °´×¡±êÌâÀ¸Í϶¯´°¿Ú' : '👉 µã±êÌâÀ¸¿ÉÑ»·»»Î»');
- log(' ¡¾▶ Æô¶¯¡¿ÅÜÈÎÎñ ¡¾⏸ ÔÝÍ£¡¿/¡¾▶ »Ö¸´¡¿ ¡¾⏹ Í£Ö¹¡¿ ¡¾£¡¿ÊÕÆð ¡¾✕¡¿¹Ø±Õ');
- log(' ÈÎÎñÅÜÍêºóÔٵ㡾▶ Æô¶¯¡¿»á×Ô¶¯ÖØÐÂ×°ÌîÒ»ÂÖ');
- }
- main();
¸´ÖÆ´úÂë
|
|