c灵梦 2017-08-04 12:38 采纳率: 0%
浏览 1465
已结题

android在悬浮窗循环显示时间,过一段时间后卡死?

开始的时候是正常的可以拖动,几分钟就出现卡死,不能拖动的现象?

以下是部分代码

  private FloatViewUtils(Context mContext) {
        this.mContext = mContext;
        manager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
        floatView = new FloatView(mContext);

    }

    public static FloatViewUtils getInstance(Context mContext) {
        if (null == instance) {
            synchronized (FloatViewUtils.class) {
                if (null == instance) {
                    instance = new FloatViewUtils(mContext);
                }
            }
        }
        return instance;
    }
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    public void addFloatView() {

        lp.width = floatView.WIDTH;
        lp.height = floatView.HEIGHT;

        lp.gravity = Gravity.LEFT | Gravity.CENTER;
//    lp.x = 0;
//    lp.y = 0;
        //设置悬浮窗口类型
        lp.type = WindowManager.LayoutParams.TYPE_PHONE;
        //设置悬浮窗口不接受焦点及触摸事件
        lp.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        //设置图片格式,效果为背景透明
        lp.format = PixelFormat.RGBA_8888;
        manager.addView(floatView, lp);

        new TimeThread().start();


        floatView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        mStartX = event.getRawX();
                        mStartY = event.getRawY();
                        break;

                    case MotionEvent.ACTION_MOVE:
                        lp.x += event.getRawX() - mStartX;
                        lp.y += event.getRawY() - mStartY;
                        manager.updateViewLayout(floatView, lp);
                        mStartX = event.getRawX();
                        mStartY = event.getRawY();
                        break;
                    case MotionEvent.ACTION_UP:
                        break;
                }

                // 消耗触摸事件
                return true;

            }

            private float mStartX, mStartY;
        });
    }
    public class TimeThread extends Thread {
        @Override
        public void run () {
            do {
                try {
                    Thread.sleep(1000);
                    Message msg = new Message();
                    msg.what = msgKey1;
                    mHandler.sendMessage(msg);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                }

                floatView.postInvalidate();
            } while(true);
        }
    }

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage (Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case msgKey1:
                    long sysTime = System.currentTimeMillis();
                    CharSequence sysTimeStr = DateFormat.format("HH:mm:ss", sysTime);

                    strText = sysTimeStr.toString();
                    floatView.text = strText.toString();

                    break;

                default:
                    break;
            }
        }
    };

  • 写回答

4条回答 默认 最新

  • devmiao 2017-08-06 15:54
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器