Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android UI线程问题_Android_Multithreading_User Interface_Bluetooth - Fatal编程技术网

Android UI线程问题

Android UI线程问题,android,multithreading,user-interface,bluetooth,Android,Multithreading,User Interface,Bluetooth,我最近一直在开发一些基本的Android应用程序,注意到一个有点奇怪的行为,我确信这是我自己的错误行为 问题似乎出在主线程上,我用它来更新UI和一些处理,比如通过蓝牙发送消息 假设我有以下几点: public void sendMessage(){ updateUI(); sendBtMessage(); } public void updateUI(){ txtView.setText("Sending message"); progressbar.setVisibility

我最近一直在开发一些基本的Android应用程序,注意到一个有点奇怪的行为,我确信这是我自己的错误行为

问题似乎出在主线程上,我用它来更新UI和一些处理,比如通过蓝牙发送消息

假设我有以下几点:

public void sendMessage(){
  updateUI();
  sendBtMessage();
}

public void updateUI(){
  txtView.setText("Sending message");
  progressbar.setVisibility(View.VISIBLE);
}

public void sendBTmessage(){
... connect to BT and send message here
}
当我运行代码时,它似乎首先运行sendBtMessage,因为在发送消息之后会出现UI更新(我希望在发送消息之前使用它)。这是因为主线程的优先级是先完成最重的工作负载吗

主线程应该只用于更新UI吗


任何建议或建议都将不胜感激。

结果表明我需要在新线程上处理sendBTMessage,例如:

new Thread(new Runnable() {
    public void run(){
      ...processing   
    }
}).start();
用户界面使用

RunOnUiThread(Runnable)

请发布在sendBTmessage中执行的代码。答案实际上取决于您如何从调用这些函数的回调方法进行连接,以及从何处调用sendMessage()。对于任何劳动密集型任务,最好使用asyncTasks,这样您的UI就不会出现瓶颈