android开发笔记之网络异常

在开发android网络程序的时候遇到一个bug,非常简单的一个apk,调用了socket与ServerSocket的应用,在打印bug的时候发现是android.os.networkonmainthread,这个错误主要是因为考虑到连接网络时可能造成整个程序的阻塞,解决这个问题的方法很简单,主要有两种方法,一是采用一种strictmode,这种方法我在某个示例程序里看到过,当时也没有细看,现在想到这个东西,

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()   

         .detectDiskReads()   

         .detectDiskWrites()   

         .detectNetwork()   // or .detectAll() for all detectable problems   

         .penaltyLog()   

         .build());   

//设置虚拟机的策略

 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()   

        .detectLeakedSqlLiteObjects()   

        //.detectLeakedClosableObjects()   

        .penaltyLog()   

        .penaltyDeath()   

        .build());

其实当时那个简单的程序在服务器没有开的时候点击登录会造成假死,也就是说整个程序阻塞在那里,我们采用这个strictmode,不过是告诉它我们知道这个情况会发生,而且我们不在意,但是这种方法显然是不可行的,在网络开发中多线程的手段是必不可少的,所以采用多线程才是解决这个问题的方法。