deeke-script-app 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/@deekeScript/@type/interface/FloatDialogs.d.ts +10 -0
- package/@deekeScript/@type/interface/System.d.ts +6 -0
- package/deekeScript.json +58 -0
- package/package.json +1 -1
- package/script/9/common/util.js +20 -0
- package/script/9/dy/common/common.js +10 -0
- package/script/9/dy/common/version.js +4 -0
- package/script/9/dy/common/video.js +8 -0
- package/script/9/dy/task/taskOne.js +7 -0
- package/script/9/dy/version/310701.js +7 -0
- package/script/index.js +0 -1
- package/script/task/douyin_zan.js +38 -0
- package/script/task/dy.js +6 -13
- package/script/task/dyApp.js +4 -4
- package/script/task/dyCity.js +1 -1
- package/script/task/tool.js +7 -16
- package/script/test/2.js +1 -0
- package/script/test/5.js +3 -0
- package/script/test/8.js +17 -0
- package/src/12/main.js +40 -0
- package/src/12/task.js +10 -0
- package/src/9/common/util.js +28 -0
- package/src/9/dy/common/common.js +13 -0
- package/src/9/dy/common/version.js +12 -0
- package/src/9/dy/common/video.js +14 -0
- package/src/9/dy/task/taskOne.js +13 -0
- package/src/9/dy/version/310701.js +7 -0
- package/src/task/douyin_zan.js +89 -0
- package/src/test/2.js +2 -0
- package/src/test/5.js +4 -0
- package/src/test/8.js +36 -0
|
@@ -16,6 +16,16 @@ interface FloatDialogs {
|
|
|
16
16
|
*/
|
|
17
17
|
public show(content: string): void;
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* toast 吐司,与System.toast区别是,可以后台弹出消息
|
|
21
|
+
*/
|
|
22
|
+
public toast(content: string): void;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* toastLong 吐司(时间更长),与System.toast区别是,可以后台弹出消息
|
|
26
|
+
*/
|
|
27
|
+
public toastLong(content: string): void;
|
|
28
|
+
|
|
19
29
|
/**
|
|
20
30
|
* 关闭FloatDialogs开启的所有弹窗
|
|
21
31
|
*/
|
|
@@ -103,6 +103,12 @@ interface System {
|
|
|
103
103
|
* @param show 是否显示
|
|
104
104
|
*/
|
|
105
105
|
public setTimeWindowShow(show: boolean);
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 切换无障碍模式,快速模式下,将自动过滤非重要控件。注意通过id或者text方式获取控件不受此模式影响;
|
|
109
|
+
* @param mode 快速模式mode为fast,非快速模式为!fast
|
|
110
|
+
*/
|
|
111
|
+
public setAccessibilityMode(mode: string);
|
|
106
112
|
}
|
|
107
113
|
|
|
108
114
|
export { };
|
package/deekeScript.json
CHANGED
|
@@ -426,6 +426,64 @@
|
|
|
426
426
|
"jsFile": "script/task/redirect.js"
|
|
427
427
|
}
|
|
428
428
|
]
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
"title": "新功能",
|
|
432
|
+
"titleHidden": false,
|
|
433
|
+
"hidden": false,
|
|
434
|
+
"methods": [
|
|
435
|
+
{
|
|
436
|
+
"title": "直接运行1",
|
|
437
|
+
"columns": 12,
|
|
438
|
+
"icon": "images/test/score.png",
|
|
439
|
+
"jsFile": "src/task/douyin_zan.js",
|
|
440
|
+
"settingPage": {
|
|
441
|
+
"params": [
|
|
442
|
+
{
|
|
443
|
+
"type": "numberRange",
|
|
444
|
+
"label": "点赞次数",
|
|
445
|
+
"name": "task_douyin_zan_count",
|
|
446
|
+
"max": 60,
|
|
447
|
+
"min": 5,
|
|
448
|
+
"value": 5,
|
|
449
|
+
"step": 1
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"type": "number",
|
|
453
|
+
"label": "评论次数",
|
|
454
|
+
"name": "task_douyin_zan_comment",
|
|
455
|
+
"value": 5
|
|
456
|
+
}
|
|
457
|
+
]
|
|
458
|
+
}
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"title": "手动运行",
|
|
462
|
+
"columns": 12,
|
|
463
|
+
"runType": "floatSwitch",
|
|
464
|
+
"icon": "images/test/score.png",
|
|
465
|
+
"jsFile": "src/task/douyin_zan.js",
|
|
466
|
+
"settingPage": {
|
|
467
|
+
"params": [
|
|
468
|
+
{
|
|
469
|
+
"type": "numberRange",
|
|
470
|
+
"label": "点赞次数",
|
|
471
|
+
"name": "task_douyin_zan_count",
|
|
472
|
+
"max": 60,
|
|
473
|
+
"min": 5,
|
|
474
|
+
"value": 5,
|
|
475
|
+
"step": 1
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"type": "number",
|
|
479
|
+
"label": "评论次数",
|
|
480
|
+
"name": "task_douyin_zan_comment",
|
|
481
|
+
"value": 5
|
|
482
|
+
}
|
|
483
|
+
]
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
]
|
|
429
487
|
}
|
|
430
488
|
],
|
|
431
489
|
"bottomMenus": [
|
package/package.json
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
let e = {
|
|
2
|
+
setLog(e) {
|
|
3
|
+
Log.setFile(e);
|
|
4
|
+
},
|
|
5
|
+
log() {
|
|
6
|
+
Log.log(arguments), console.log(arguments);
|
|
7
|
+
},
|
|
8
|
+
click(e) {
|
|
9
|
+
this.log("点击了控件:", e), Gesture.click(e.bounds().left + Math.random() * e.bounds().width(), e.bounds().top + Math.random() * e.bounds().height());
|
|
10
|
+
},
|
|
11
|
+
input(e, t) {
|
|
12
|
+
e.setText(t);
|
|
13
|
+
},
|
|
14
|
+
swipe() {
|
|
15
|
+
var e = Device.height() * (.6 + .2 * Math.random()), t = Device.height() * (.2 + .2 * Math.random()), o = Math.random() * Device.width() * .6 + .2 * Device.width();
|
|
16
|
+
Gesture.swipe(o, e, o + .1 * Device.width(), t, 200 + 100 * Math.random());
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
module.exports = e;
|
package/script/index.js
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
//这个文件不用编写代码
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
let e = {
|
|
2
|
+
log() {
|
|
3
|
+
Log.log(arguments), console.log(arguments);
|
|
4
|
+
},
|
|
5
|
+
comment() {
|
|
6
|
+
var e = UiSelector().id("com.ss.android.ugc.aweme:id/comment_container").isVisibleToUser(!0).findOne(), e = (console.log(e),
|
|
7
|
+
Gesture.click(e.bounds().left + Math.random() * e.bounds().width(), e.bounds().centerY()),
|
|
8
|
+
console.log("打开评论窗口"), System.sleep(1200), UiSelector().className("android.widget.EditText").editable(!0).findOne()), e = (console.log(e),
|
|
9
|
+
Gesture.click(e.bounds().left + Math.random() * e.bounds().width(), e.bounds().centerY()),
|
|
10
|
+
console.log("开始输入评论"), System.sleep(500), UiSelector().className("android.widget.EditText").editable(!0).findOne()), e = (console.log(e),
|
|
11
|
+
Log.log(e), e.setText("太棒了"), System.sleep(500), UiSelector().id("com.ss.android.ugc.aweme:id/dqq").text("发送").findOne());
|
|
12
|
+
console.log(e), Gesture.click(e.bounds().centerX(), e.bounds().centerY()),
|
|
13
|
+
System.sleep(500), Gesture.back(), System.sleep(500);
|
|
14
|
+
},
|
|
15
|
+
backHome() {
|
|
16
|
+
var e;
|
|
17
|
+
console.log("开始返回主页");
|
|
18
|
+
let o = 5;
|
|
19
|
+
for (;(e = UiSelector().id("com.ss.android.ugc.aweme:id/x_t").isVisibleToUser(!0).findOne()) && console.log("在首页"),
|
|
20
|
+
Gesture.back(), console.log("返回"), System.sleep(1e3), !e && 0 <= --o; );
|
|
21
|
+
},
|
|
22
|
+
run() {
|
|
23
|
+
console.log("开始进入应用"), App.launch("com.ss.android.ugc.aweme"), System.sleep(2e3);
|
|
24
|
+
let e = Storage.getInteger("task_douyin_zan_count"), o = Storage.getInteger("task_douyin_zan_comment");
|
|
25
|
+
for (console.log("配置:" + e + " 赞," + o + " 评论"); 0 < e || 0 < o; ) try {
|
|
26
|
+
var s;
|
|
27
|
+
console.log("zanCount: " + e + " commentCount: " + o), 0 <= --e && (s = UiSelector().id("com.ss.android.ugc.aweme:id/fd9").isVisibleToUser(!0).findOne(),
|
|
28
|
+
console.log("点赞tag", s), Gesture.click(s.bounds().left + Math.random() * s.bounds().width(), s.bounds().centerY()),
|
|
29
|
+
System.sleep(1e3), console.log("点赞完成")), 0 <= --o && (this.comment(),
|
|
30
|
+
System.sleep(1e3)), UiSelector().id("com.ss.android.ugc.aweme:id/viewpager").desc("视频").scrollable(!0).findOne().scrollForward(),
|
|
31
|
+
System.sleep(3e3);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
console.log(e), this.backHome();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
Log.setFile("douyin_zan.js.log"), e.run(), FloatDialogs.show("抖音任务完成");
|
package/script/task/dy.js
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
let
|
|
1
|
+
let e = require("./dyApp"), o = UiSelector().id("name").findOne(), r = {
|
|
2
|
+
toker_view_video_keywords: Storage.get("toker_view_video_keywords"),
|
|
3
|
+
toker_view_video_second: Storage.getInteger("toker_view_video_second"),
|
|
4
|
+
toker_run_sex: Storage.getArray("toker_run_sex")
|
|
5
|
+
};
|
|
2
6
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// console.log(tag.click());
|
|
6
|
-
let config = {
|
|
7
|
-
toker_view_video_keywords: Storage.get('toker_view_video_keywords'),
|
|
8
|
-
toker_view_video_second: Storage.getInteger('toker_view_video_second'),
|
|
9
|
-
toker_run_sex: Storage.getArray('toker_run_sex'),
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
console.log(config, dyApp.getName());//获取json文件中的配置参数
|
|
13
|
-
|
|
14
|
-
FloatDialogs.show('提示', '请编写业务代码');
|
|
7
|
+
console.log(r, e.getName()), FloatDialogs.show("提示", "请编写业务代码");
|
package/script/task/dyApp.js
CHANGED
package/script/task/dyCity.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
FloatDialogs.show(
|
|
1
|
+
FloatDialogs.show("提示", "请编写业务代码");
|
package/script/task/tool.js
CHANGED
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
let
|
|
2
|
-
intoApp() {
|
|
3
|
-
|
|
4
|
-
},
|
|
5
|
-
|
|
6
|
-
backApp() {
|
|
7
|
-
//退出当前App
|
|
8
|
-
},
|
|
9
|
-
|
|
10
|
-
task(){
|
|
11
|
-
//任务代码
|
|
12
|
-
},
|
|
13
|
-
|
|
1
|
+
let a = {
|
|
2
|
+
intoApp() {},
|
|
3
|
+
backApp() {},
|
|
4
|
+
task() {},
|
|
14
5
|
run() {
|
|
15
|
-
FloatDialogs.show(
|
|
6
|
+
FloatDialogs.show("提示", "请编写业务代码");
|
|
16
7
|
}
|
|
17
|
-
}
|
|
8
|
+
};
|
|
18
9
|
|
|
19
|
-
|
|
10
|
+
a.run();
|
package/script/test/2.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
System.sleep(2e3), Engines.executeScriptStr("engines", "setInterval(function (){console.log('engines任务');}, 1000);");
|
package/script/test/5.js
ADDED
package/script/test/8.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function n() {
|
|
2
|
+
console.log("任务1");
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
function e(n) {
|
|
6
|
+
console.log("任务2", "i=" + n);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
let o = 0, a = (setInterval(function() {
|
|
10
|
+
n(), o++;
|
|
11
|
+
}, 1e3), {
|
|
12
|
+
run: function() {
|
|
13
|
+
for (;;) e(o), System.sleep(3e3);
|
|
14
|
+
}
|
|
15
|
+
}), l = new java.lang.Thread(new java.lang.Runnable(a));
|
|
16
|
+
|
|
17
|
+
l.start();
|
package/src/12/main.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
let res = {
|
|
3
|
+
code: 0,
|
|
4
|
+
data: {
|
|
5
|
+
action: 'task'
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
let index = 0;
|
|
10
|
+
|
|
11
|
+
setInterval(function () {
|
|
12
|
+
index++;
|
|
13
|
+
if (index > 5) {
|
|
14
|
+
console.log('关闭通知');
|
|
15
|
+
res.data.action = 'exit';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (index > 6) {
|
|
19
|
+
res.data.action = "";
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (res.code == 0 && res.data.action != "") {
|
|
23
|
+
let taskName = res.data.action;
|
|
24
|
+
if (taskName == 'exit') {
|
|
25
|
+
console.log('关闭除了当前脚本外的其他脚本');
|
|
26
|
+
Engines.closeOther();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (Engines.childScriptCount() > 0) {
|
|
31
|
+
console.log('正在运行中');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console.log('开始执行任务:' + taskName + ".js");
|
|
36
|
+
Engines.executeScript("./" + taskName + ".js");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Http.get("xxx.com/heard?isRunning=" + (Engines.childScriptCount() > 0 ? true : false));
|
|
40
|
+
}, 3000);
|
package/src/12/task.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
let util = {
|
|
2
|
+
setLog(file) {
|
|
3
|
+
Log.setFile(file);
|
|
4
|
+
},
|
|
5
|
+
log() {
|
|
6
|
+
Log.log(arguments);
|
|
7
|
+
console.log(arguments);
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
click(tag) {
|
|
11
|
+
this.log('点击了控件:', tag);
|
|
12
|
+
Gesture.click(tag.bounds().left + Math.random() * tag.bounds().width(), tag.bounds().top + Math.random() * tag.bounds().height());
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
input(tag, text) {
|
|
16
|
+
tag.setText(text);
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
swipe() {
|
|
20
|
+
let bottom = Device.height() * (0.6 + Math.random() * 0.2);
|
|
21
|
+
let top = Device.height() * (0.2 + Math.random() * 0.2);
|
|
22
|
+
let left = Math.random() * Device.width() * 0.6 + Device.width() * 0.2;
|
|
23
|
+
|
|
24
|
+
Gesture.swipe(left, bottom, left + Device.width() * 0.1, top, 200 + 100 * Math.random());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
module.exports = util;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
let util = require('../../common/util');
|
|
2
|
+
let common = require('./common');
|
|
3
|
+
let ids = require('./version');
|
|
4
|
+
|
|
5
|
+
let video = {
|
|
6
|
+
zan(){
|
|
7
|
+
let zanTag = common.id(ids.video.zan).isVisibleToUser(true).findOne();
|
|
8
|
+
if(zanTag){
|
|
9
|
+
util.click(zanTag);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
module.exports = video;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
|
|
2
|
+
let newTask = {
|
|
3
|
+
log(){
|
|
4
|
+
Log.log(arguments);
|
|
5
|
+
console.log(arguments);
|
|
6
|
+
},
|
|
7
|
+
comment() {
|
|
8
|
+
//注释
|
|
9
|
+
let tag = UiSelector().id('com.ss.android.ugc.aweme:id/comment_container').isVisibleToUser(true).findOne();
|
|
10
|
+
console.log(tag);
|
|
11
|
+
Gesture.click(tag.bounds().left + Math.random() * tag.bounds().width(), tag.bounds().centerY());
|
|
12
|
+
console.log('打开评论窗口');
|
|
13
|
+
System.sleep(1200);
|
|
14
|
+
|
|
15
|
+
let inputTag = UiSelector().className('android.widget.EditText').editable(true).findOne();
|
|
16
|
+
console.log(inputTag);
|
|
17
|
+
Gesture.click(inputTag.bounds().left + Math.random() * inputTag.bounds().width(), inputTag.bounds().centerY());
|
|
18
|
+
console.log('开始输入评论');
|
|
19
|
+
System.sleep(500);
|
|
20
|
+
|
|
21
|
+
let iptTag = UiSelector().className('android.widget.EditText').editable(true).findOne();
|
|
22
|
+
console.log(iptTag);
|
|
23
|
+
Log.log(iptTag);
|
|
24
|
+
iptTag.setText('太棒了');
|
|
25
|
+
System.sleep(500);
|
|
26
|
+
|
|
27
|
+
let sendTag = UiSelector().id('com.ss.android.ugc.aweme:id/dqq').text('发送').findOne();
|
|
28
|
+
console.log(sendTag);
|
|
29
|
+
|
|
30
|
+
Gesture.click(sendTag.bounds().centerX(), sendTag.bounds().centerY());
|
|
31
|
+
System.sleep(500);
|
|
32
|
+
Gesture.back();
|
|
33
|
+
System.sleep(500);
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
backHome() {
|
|
37
|
+
console.log('开始返回主页');
|
|
38
|
+
let homeTag;
|
|
39
|
+
let backMaxCount = 5;
|
|
40
|
+
do {
|
|
41
|
+
homeTag = UiSelector().id('com.ss.android.ugc.aweme:id/x_t').isVisibleToUser(true).findOne();
|
|
42
|
+
if (homeTag) {
|
|
43
|
+
console.log('在首页');
|
|
44
|
+
}
|
|
45
|
+
Gesture.back();
|
|
46
|
+
console.log('返回');
|
|
47
|
+
System.sleep(1000);
|
|
48
|
+
} while (!homeTag && --backMaxCount >= 0);
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
run() {
|
|
52
|
+
console.log('开始进入应用');
|
|
53
|
+
App.launch('com.ss.android.ugc.aweme');
|
|
54
|
+
System.sleep(2000);
|
|
55
|
+
let zanCount = Storage.getInteger('task_douyin_zan_count');
|
|
56
|
+
let commentCount = Storage.getInteger('task_douyin_zan_comment');
|
|
57
|
+
|
|
58
|
+
console.log('配置:' + zanCount + ' 赞,' + commentCount + ' 评论');
|
|
59
|
+
while (zanCount > 0 || commentCount > 0) {
|
|
60
|
+
try {
|
|
61
|
+
console.log('zanCount: ' + zanCount + ' commentCount: ' + commentCount);
|
|
62
|
+
if (--zanCount >= 0) {
|
|
63
|
+
let tag = UiSelector().id('com.ss.android.ugc.aweme:id/fd9').isVisibleToUser(true).findOne();
|
|
64
|
+
console.log('点赞tag', tag);
|
|
65
|
+
Gesture.click(tag.bounds().left + Math.random() * tag.bounds().width(), tag.bounds().centerY());
|
|
66
|
+
System.sleep(1000);
|
|
67
|
+
console.log('点赞完成');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (--commentCount >= 0) {
|
|
71
|
+
this.comment();
|
|
72
|
+
System.sleep(1000);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
let tag = UiSelector().id('com.ss.android.ugc.aweme:id/viewpager').desc('视频').scrollable(true).findOne();
|
|
77
|
+
tag.scrollForward();
|
|
78
|
+
System.sleep(3000);
|
|
79
|
+
} catch (e) {
|
|
80
|
+
console.log(e);
|
|
81
|
+
this.backHome();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Log.setFile("douyin_zan.js.log");
|
|
88
|
+
newTask.run();
|
|
89
|
+
FloatDialogs.show('抖音任务完成');
|
package/src/test/2.js
ADDED
package/src/test/5.js
ADDED
package/src/test/8.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
//请开始编写DeekeScript代码吧~
|
|
3
|
+
|
|
4
|
+
function taskOne(){
|
|
5
|
+
console.log('任务1');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function taskTwo(i){
|
|
9
|
+
console.log('任务2', "i="+i);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
Engines.executeScriptStr("engines", "console.log('开始');System.sleep(5000);console.log('完成');");
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
let i = 0;
|
|
17
|
+
setInterval(function(){
|
|
18
|
+
taskOne();
|
|
19
|
+
i++;
|
|
20
|
+
}, 1000);
|
|
21
|
+
|
|
22
|
+
let obj = {
|
|
23
|
+
run: function () {
|
|
24
|
+
while(true){
|
|
25
|
+
taskTwo(i);
|
|
26
|
+
System.sleep(3000);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let thread = new java.lang.Thread(new java.lang.Runnable(obj))
|
|
32
|
+
thread.start();
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|