重复调用线程导致Ui在android中挂起

时间:2017-08-22 06:02:06

标签: java android multithreading bluetooth

我正在开发一个蓝牙应用程序。在我有一个按钮,点击按钮我开始一个线程。在线程中,我发现并连接ble设备。重复点击按钮导致UI挂起

我用来创建线程的代码是:

new Thread(new Runnable() {
            @Override
            public void run() {
//do bluetooth stuffs

            }
        }).start();

我没有在任何地方停止这个帖子。

我不知道导致UI挂起的原因请帮助我。

3 个答案:

答案 0 :(得分:0)

你的意思是,如果你不断反复按下按钮(不等待任务完成),那么ui会滞后吗?或者当您按下按钮时,稍等一下,然后再按一次。

如果是第一种情况(你快速连续按下按钮),试试这个:如果你在第一次启动过程时设置了一些布尔标志,那么每次按下按钮检查是否设置了该标志为true,仅在标志为false时执行搜索。不确定这是不是你的问题,但值得一试?

答案 1 :(得分:0)

我建议你改用线程池。资源是有限的。我不明白你为什么要为每个按钮创建一个新线程。一堆针对资源的线程可能会冻结您的应用程序,或者可能存在与实现相关的问题,例如死锁,线程争用或线程饥饿,这些问题肯定会提示冻结​​您的应用程序。

答案 2 :(得分:0)

对于Android,您可以使用处理程序代替线程或使用处理程序处理您的线程是一种更好的方法,例如,您可以使用类似

new Handler().post(new Runnable() {
            @Override
            public void run() {

            }
        });

如果您想使用主线程,请使用like。

new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {

            }
        });

有关信息,您可以参考此链接 difference between Thread and Handler