Как клиент может постоянно принимать сообщения от сервера - PullRequest
0 голосов
/ 23 июня 2019

Я хотел бы принимать сообщения от сервера постоянно, поэтому я делаю MainActivity implements Runnable и переопределяю run().

В run() у меня есть бесконечный цикл для приема сообщений.Кроме того, я запускаю поток в onCreate().

Однако, когда я запускаю приложение в эмуляторе, возникает исключение, которое касается утечки окна.

Код:

public class MainActivity extends AppCompatActivity implements Runnable {

    @Override
    public void run() {
        try {
            while (true) {
                if (client.isConnected()) {
                    if (!client.isInputShutdown()) {
                        if ((content = br.readLine()) != null) {
                            content += "\n";
                            handler.sendEmptyMessage(0x123);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button_send);
        editText = (EditText) findViewById(R.id.editText);
        textView = (TextView) findViewById(R.id.textView);

        showInputDialog();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = editText.getText().toString();
                editText.setText("");
                Message msg = Message.obtain();
                msg.obj = str;
                msg.what = CHANGE_TEXT;
                msg.arg1 = 1;
                msg.arg2 = 1;
                handle.sendMessage(msg);

                new MsgThread(str);
            }
        });
        new Thread(Mainactivity.this).start();
    }
}
...