IMouse自动化群控多线程遇到的问题
- 要同时对多台设备进行控制,不能单一的采用一个进程来控制,因为这会导致调度设备的不一致,这个劣势会在之后多台设备中不断放大。多线程的程序需要将每一个线程看作独立的个体,程序的逻辑不能出现冗余,在run方法中不可以传递参数,但可以通过实现Runnable接口,来从类内部传递参数。
class MyThread implements Runnable{
//设备id
private String deviceId;
//打开抖音功能
private UseController use = new UseController();
//搜索功能
private SearchNewController search = new SearchNewController();
//通过构造方法传递线程必须的设备id参数
public MyThread(String deviceId){
this.deviceId = deviceId;
}
@Override
public void run() {
use.useTictok(deviceId);
search.writeSearch(deviceId);
}
}
在每调用一次线程,程序就会new一个UserController和SearchNewController,所以在这两个类的设计过程中要保证功能的精简
- 动态输入中文,起先我设计是通过Scanner在控制台获取输入到抖音app的文字,但是在使用多线程时,涉及到的问题是Scanner类的阻塞式读取特性,它会导致控制台不断显示其他线程执行的流程,而它本身却在阻塞等待用户输入,这使得程序的性能很差,所以我改为使用.properties文件来实现动态的文字录入。在设计properties文件时,因为编译器没有设置为UTF-8导致中文显示异常,properties文件如下:
text=你好,世界
Java动态读取properties文件的代码如下:
// 使用ClassLoader加载资源文件
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("search.properties");
Properties properties = new Properties();
try {
if (input != null) {
// 指定字符编码为UTF-8
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
properties.load(reader);
reader.close();
} else {
System.err.println("Resource not found. Make sure the file is in the resources folder.");
}
this.msg = properties.getProperty("text");
} catch (IOException e) {
e.printStackTrace();
}
注意:properties文件不能直接在resources文件下读取,需要使用ClassLoader来加载位于resources文件夹中的search.properties文件
- IMouse新接口在手机上的配置,在IMouse中,需要通过程序调用API来向手机输入中文需要在苹果手机的快捷指令中下载对应的指令,通过下载指令后才能通过程序来控制苹果手机完成复杂一点的功能
链接:IMouse新接口的绑定流程
IMouse老接口提供有直接输入中文字符的方法,但是在群控中不太方便控制。
新接口和老接口的区别:新接口采用鼠标中键进行控制,而老接口采用键盘来控制,在配置快捷指令时,可以发现他们的区别
设置->触控->辅助触控->设备->iMouse4.1中进行设置
在旧版中键盘的控制在辅助功能->键盘->全键盘控制->命令