我有这个代码连接到服务器并发送消息,它完美运行,我只是不知道可运行的。 run(){}中的代码是在循环中执行的吗? 我在里面尝试了一个log.e,它只打印一次,那么它实际上是如何工作的?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new ClientThread()).start();
}
public void onClick(View view) {
try {
EditText et = (EditText) findViewById(R.id.EditText01);
String str = et.getText().toString();
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())),
true);
out.println(str);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
class ClientThread implements Runnable {
@Override
public void run() {
Log.e("in try","run");
try {
InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
socket = new Socket(serverAddr, SERVERPORT);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
答案 0 :(得分:2)
要回答您的问题 - 不,run()
中的Runnable
方法不会在循环中执行。它只执行一次。
它只是代表了将来可以完成的事情,通常是在不同的Thread
中。
答案 1 :(得分:0)
run(){}中的代码是否在循环中执行?
注意:您可以使用其他方式在循环中调用它,因为处理程序可以通过调用 - handler.postDelayed(this, 1000);
每1000 ms
将其再次发布到处理程序。< / p>
表示可以执行的命令。通常用于在不同的线程中运行代码。
公共方法:
public abstract void run()
开始执行课程的活动部分&#39;码。这个方法是 在使用类创建的线程启动时调用 它实现了Runnable。
Runnable的基础 -
使用Runnable
接口,您可以多次运行该类。
示例 -
class ClientThread implements Runnable {
@Override
public void run() {
Log.e("in try","run");
//Some code
}
}
//Multiple threads share the same object.
ClientThread rc = new ClientThread ();
Thread t1 = new Thread(rc);
t1.start();
Thread.sleep(1000); // Waiting for 1 second before starting next thread
Thread t2 = new Thread(rc);
t2.start();
Thread.sleep(1000); // Waiting for 1 second before starting next thread
Thread t3 = new Thread(rc);
t3.start();
答案 2 :(得分:0)
Runnable
的功能已在上面的答案中解释。您对这些答案的评论:
您是否调试过,如果套接字确实打开了连接并且您看到服务器输入上的数据?它是否返回一个OutputStreamWriter对象?如果服务器关闭,您应该无法发送任何内容。然而,这并不意味着Android代码失败。可以设置输出并将内容写入其缓冲区/流,但它永远不会被删除。