我不明白runnable,它是如此令人困惑

时间:2014-07-18 11:42:58

标签: android runnable

我有这个代码连接到服务器并发送消息,它完美运行,我只是不知道可运行的。 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();
        }
    }
}

}

3 个答案:

答案 0 :(得分:2)

要回答您的问题 - 不,run()中的Runnable方法不会在循环中执行。它只执行一次。

它只是代表了将来可以完成的事情,通常是在不同的Thread中。

答案 1 :(得分:0)

  

run(){}中的代码是否在循环中执行?

  • 不,您提供的代码至少不会在循环中运行。

注意:您可以使用其他方式在循环中调用它,因为处理程序可以通过调用 - handler.postDelayed(this, 1000);1000 ms将其再次发布到处理程序。< / p>

公共接口Runnable -

表示可以执行的命令。通常用于在不同的线程中运行代码。

公共方法:

  

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(); 

参考:Runnable in Android

答案 2 :(得分:0)

Runnable的功能已在上面的答案中解释。您对这些答案的评论:

您是否调试过,如果套接字确实打开了连接并且您看到服务器输入上的数据?它是否返回一个OutputStreamWriter对象?如果服务器关闭,您应该无法发送任何内容。然而,这并不意味着Android代码失败。可以设置输出并将内容写入其缓冲区/流,但它永远不会被删除。