如何优化这段代码

利用多线程实现了一个类似toast()的,但是可以在显示时间和显示位置都相互独立的功能。

感觉资源占用很大,可否优化?
顺带一问,如何让悬浮窗口有圆角?

/* flash() 可以互不干扰地持续在屏幕位置上显示信息
*/

for (let i = 0; i < 10; i++) {
    flash(i, 300, 300 + i * 100, 2000);
    sleep(500);
}

toastLog("End of pops.");

function flash(txt, x, y, t) {
    th = threads.start(function() {
        new Flash(txt, x, y, t).show();
    });
    th.waitFor();
}

function Flash(txt, x, y, t) {

    this.txt = txt.toString();
    this.x = x || device.width / 2;
    this.y = y || device.height * 4 / 5;
    this.t = t || 2000;

    this.w = floaty.rawWindow(
        <frame gravity="center" bg="#ff0000" w="20" h="20">
            <text id="text">text
            </text>
        </frame>
    );
    this.show = function() {
        this.w.text.setText(this.txt);
        this.w.setPosition(this.x, this.y);
        //setTimeout(this.w.close(), this.t);
        sleep(this.t);
        this.w.close();
    };
}
最后由 basking 编辑
var single = (function () {
  var unique;

  function getInstance() {
    if (unique === undefined) {
      unique = new Flash();
    }
    return unique;
  }
  return {
    getInstance: getInstance
  }
})();

function Flash() {}
Flash.prototype.update = function (content, x, y, color, t) {
  this.content = content || '未传入参数'
  this.x = x || random(100, 300)
  this.y = y || random(100, 900)
  this.color = color || -2278181
  this.t = t || 2000
}
Flash.prototype.show = function () {
  var window = floaty.rawWindow(
    <card cardBackgroundColor="#aa00FF00" cardCornerRadius="18dp">
      <text id="text" size="30dp"  layout_width="wrap_content"  layout_height="wrap_content"layout_gravity="center" gravity="center" paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10" >123</text>
    </card>
  );
  window.text.setText(this.content);
  window.text.setBackgroundColor(this.color);
  window.setPosition(this.x, this.y);
  setTimeout(() => {
    window.close();
  }, this.t);
}

function flash(content, x, y, color, t) {
  var content = content.toString()
  var f = single.getInstance()
  f.update(content, x, y, color, t)
  f.show()
}
for (let i = 0; i < 10; i++) {
  var color = colors.rgb(random(0, 255), random(0, 255), random(0, 255))
  flash(i * i * i * i * i + "", 300, 200 + i * 150, color, (i + 1) * 1000);
}
flash('hello world')
flash('Are you ok?')
flash('我很好')
flash('you are beautiful')

最后由 jiajia123 编辑

如果这不叫完美,什么是完美?!

大赞👍,值得仔细学习,很好的例子。

  • 3
    帖子
  • 400
    浏览

与 Auto.js 的连接断开,我们正在尝试重连,请耐心等待