問題:
最近在做軟體工程大作業, 用Spring mvc做伺服器,安卓做用戶端
然後在電腦上開啟了tomcat伺服器,用安卓虛擬機器測試用戶端發現可以串連伺服器,但是用真機測試,卻一直都不能串連
原因:
Google從Android 3開始,強制預設禁止UI主線程發起通訊請求。
而我的虛擬機器SDK版本是2.3.3, 而手機確實4.1.1,所以造成了虛擬機器可以串連伺服器,而真機卻不可以。
解決方案:
方法1. 可以臨時性的 在Activity初期化的時候,指定StickMode,可以繞開這個OS check, 不過別把這個當徹底的解決方案
在Activity中的OnCreate裡面添加:
StrictMode.setThreadPolicy(new Strict Mode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() .penaltyLog() .build()); StrictMode.setVmPolicy(new Stric tMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .penaltyLog() .penaltyDeath() .build());
再在onCreate()方法前面加上@SuppressLint("NewApi")註解就可以了。
方法2:
經過測試,上面那個方法只在程式只有一個Activity的情況下成功過,多個Activity有http串連的情況還沒有成功過,所以這個方法不通用。
更好的方法是在開一個子線程來進行非同步http串連
推薦用AynsTask類來進行非同步處理。
AynsTask是android提供了一套專門用於非同步處理的類。使用這個類可以為耗時程式開闢一個新線程進行處理,處理完時返回。
其實,AsynTask類就是對Thread類的一個封裝,並且加入了一些新的方法。
推薦看這篇文章介紹更詳細: 點擊開啟連結
也可以用Handler+Thread結構,看個人喜好。