我创建了一个新线程来处理我的 TCP 管理需求。我这样做是为了在 UI 线程执行各种套接字魔术时保持其处于活动状态。我遇到的问题是 ServerThread 中使用的变量 num 似乎没有在 handler.post() 的 run 方法中更新。它改变了一次,但我的 while(true) 循环中的后续迭代不再改变它的值。但是,在 handler.post() 之外,我注意到它正在正确更改。为了查看 num 的值,我为 logcat 包含了一个日志命令,这就是为什么我知道这是正在发生的事情。问题是,我需要 run() 方法中的变量 num 来更新 UI 线程中的一些内容。
我声明 num 的方式可能有问题。我没有在代码中包含我认为与我的问题无关的大部分内容,所以如果我遗漏了什么,请现在告诉我。这是我对 android java 线程的第一次冒险,所以非常感谢一些帮助。只是今晚精神力耗尽。
public class MainActivity extends Activity {
private int num = 0;
private Handler handler = new Handler();
//Other declarations
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Do bunch of things including starting ServerThread
//and creating a TCP server socket
}
public class ServerThread implements Runnable{
public void run(){
// ...
// Do bunch of stuff including waiting for a client to connect
try{
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
while(true){
num = in.read();
Log.e("MainActivity", "A:" +num); //<-- WORKS FINE
if(num == -1) //client socket closed
break;
handler.post(new Runnable() {
@Override
public void run() {
Log.e("MainActivity", "B:" +num); //<-- DOES NOT WORK FINE
//Do bunch of stuff here with the variable num
//including updating the UI thread
}
}
}catch(Exception e){
// ...
}
}
}