在开发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,不过是告诉它我们知道这个情况会发生,而且我们不在意,但是这种方法显然是不可行的,在网络开发中多线程的手段是必不可少的,所以采用多线程才是解决这个问题的方法。