OK.Проблема № 1, вы едите свои исключения.Я почти уверен (хотя, может быть, он изменился?) E.printStackTrace () ничего не делает.Вам нужно либо зарегистрировать их с помощью Log, либо обернуть и выбросить с помощью RuntimeException (я предпочитаю потерпеть неудачу, чем тихо игнорировать, поэтому я выбрал последнее).
У вас есть 2 способа сделать это (ну, несколько, номы обсудим 2).
1) Сделайте фоновую работу в AsyncTask.Я бы выбрал это.Гораздо проще, чем создавать / управлять собственным потоком.
2) Сохраняйте свой код, но когда вы обновляете пользовательский интерфейс, делайте это с помощью обработчика, созданного в потоке пользовательского интерфейса.
public class ClienteTcpAnroid extends Activity implements Runnable
{
private static String myIP;
private static String myPort;
String mensaje;
Thread threadProcesaAlarmas;
public TextView _tv_estado;
public EditText _et_ip;
public EditText _et_port;
public Button botonConectar;
BufferedReader b;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
_tv_estado = (TextView) findViewById(R.id.tv_estado);
_et_ip = (EditText) findViewById(R.id.et_ip);
_et_port = (EditText) findViewById(R.id.et_port);
botonConectar = (Button) findViewById(R.id.button1);
botonConectar.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Socket mySocket;
PrintStream p;
try
{
mySocket = new Socket("192.168.1.35", 12345);
b = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
threadProcesaAlarmas = new Thread(ClienteTcpAnroid.this);
threadProcesaAlarmas.start();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
});
handler = new Handler();
}
@Override
public void run()
{
while (true)
{
try
{
final String mensaje = b.readLine();
Log.d("mensaje", mensaje);
handler.post(new Runnable()
{
public void run()
{
_et_ip.setText(mensaje);
}
});
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
}
Я предполагаю, что чтение сокета блокируется.Конечно, у вас есть «бесконечный цикл», но это не имеет большого значения, поскольку он блокирует.Единственное, что я бы посоветовал, это выяснить, как обрезать это в onPause.
Кроме того, кстати, забудьте об AsyncTask здесь.До сих пор не понял, что именно ты пытался сделать.Нить - это путь.Ну, я думаю, что Служба - это путь, но это сработает.