Android 我不知道';我不懂runnable,它太令人困惑了
我有一个连接到服务器并发送消息的代码,它工作得很好,我只是不知道如何运行。 run()中的代码{}是否在循环中执行? 我试着在里面放一个log.e,它只打印一次,那么它实际上是如何工作的呢Android 我不知道';我不懂runnable,它太令人困惑了,android,runnable,Android,Runnable,我有一个连接到服务器并发送消息的代码,它工作得很好,我只是不知道如何运行。 run()中的代码{}是否在循环中执行? 我试着在里面放一个log.e,它只打印一次,那么它实际上是如何工作的呢 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new Thread(new Clien
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();
}
}
}
}要回答您的问题-否,
Runnable
中的run()
方法不是在循环中执行的。它只执行一次
它只是表示将来可以做的事情,通常是在不同的线程中进行
run()中的代码{}是否在循环中执行
- 不,您提供的代码至少不会在循环中运行
注意:您可以使用其他方法在循环中调用它,就像处理程序可以通过调用-handler.postDelayed(这是1000)将它再次发布到处理程序一样代码>每1000毫秒一次
公共接口可运行-
表示可以执行的命令。通常用于在不同线程中运行代码
公共方法:
公开摘要无效运行()
开始执行类代码的活动部分。这种方法是可行的
在使用类创建的线程启动时调用
它实现了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();
参考:.上述答案中已解释了可运行的功能。对于您对这些答案的评论:
如果套接字确实打开了一个连接,并且您看到了服务器输入上的数据,您是否进行了调试?它是否返回OutputStreamWriter对象?如果服务器关闭,您将无法发送任何内容。然而,这并不意味着android代码会失败。可以设置输出并将内容写入其缓冲区/流,但它永远不会输出。为什么应用程序仍然能够连接到服务器?如果服务器关闭,我运行应用程序,我假设运行未连接到服务器,因此我在应用程序启动后启动服务器,然后单击“发送”,它仍然能够连接并将文本发送到服务器,这是怎么回事?请参阅我在回答中的注释。Appologise,全部删除,现在我的问题是上面我的主要帖子下的一条评论为什么应用程序在重新启动后仍然能够连接到服务器?
-你确定它之前在第一次呼叫时启动过一次吗?你确定在代码中其他地方没有其他调用来启动这个可运行类吗?重新启动路由器并获取新的IP地址怎么样?没问题。只要您在方法中提供IP地址作为参数,您就可以始终使用传入的正确IP进行连接。请确保在重新启动应用程序后运行该应用程序。仅使用新IP进行了尝试,如果我在应用程序启动后启动服务器,则不会发送消息,因此这意味着它没有连接。非常感谢。