style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Socket Android 4.X

Hola,

Decripción: Un "Hello World !!" con sockets, Socket-Cliente en dispositivo Android 4 y el servidor en una máquina local, la aplicación tronaba en el dispositivo Android 4 y se cerraba. La unica forma de que no tronara era con un catch Exeption , donde la variable no arrojaba nada:

          catch (Exception e){
                        String err = (e.getMessage()==null)?"Exception":e.getMessage();
                        Log.e("PeleApp","3.-"+err);
            }

de echo el valor de 'e' es null, es decir no regresa nada y de no tener la condición tronaba por pasar 'null' a Log.e(). Siempre tronaba en la línea donde creaba el socket:

Socket lsocket=new Socket("10.2.1.16",7777);

Entender Solución: Cuando me encontré con el siguiente articulo :

http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-i...

Remedio: Ahora la actividad donde defino mi socket se ve de la siguiente forma:

public class ControllerMenu extends Activity{
         @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_menu);
                 new Thread(new Runnable() {
                                public void run() {
                                        try {
                                                Log.i("PeleApp"," Before definition of Socket : 10.2.1.16"+":"+7777);
                                                Socket lsocket=new Socket("10.2.1.16",7777);
                                                Log.i("PeleApp","after connect ..Connexion Successful!...");
                                                lsocket.close();
                                                                                               
                                        } catch (UnknownHostException e) {
                                                String err = (e.getMessage()==null)?"UnknownHostException":e.getMessage();
                                                        Log.e("PeleApp","0..-"+err);
                                        } catch (IOException e) {
                                                String err = (e.getMessage()==null)?"IOException":e.getMessage();
                                                        Log.e("PeleApp","1.-"+err);
                                                }catch (NumberFormatException e) {
                                                        // TODO Auto-generated catch block
                                                        String err = (e.getMessage()==null)?"NumberFormatException":e.getMessage();
                                                        Log.e("PeleApp","2.-"+err);
                                                }catch (Exception e){
                                                        String err = (e.getMessage()==null)?"Exception":e.getMessage();
                                                        Log.e("PeleApp","3.-"+err);
                                                }
                                }
                            }).start();
                        }
}

Conclusión:Por lo que veo muchas aplicaciones antiguas les debe de estar pasando esto, por abusar del "UI-Thread" principal y la aplicación de buenas practicas para mejorar el performance de parte de Android 4.X. Por lo que muchos "How to" que estaba siguiendo y que estan en la red son obsoletos.

Saludos

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">