Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android:StrictMode VmPolicy violation with POLICY_DEATH; android.os.NetworkOnMainThreadException

Android:StrictMode VmPolicy violation with POLICY_DEATH; android.os.NetworkOnMainThreadException

編輯:關於Android編程

這幾天使用countly,然後發現在android4.0以上的系統,打開app就閃退了。   看了一下error log:   11-25 19:14:29.637: E/StrictMode(13886): class com.xx.mrnst.android.guide.SplashActivity; instances=2; limit=1 11-25 19:14:29.637: E/StrictMode(13886): android.os.StrictMode$InstanceCountViolation: class com.xx.mrnst.android.guide.SplashActivity; instances=2; limit=1 11-25 19:14:29.637: E/StrictMode(13886): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1) 11-25 19:31:45.215: E/ConnectionManager(14418): android.os.NetworkOnMainThreadException   上網找了一些解決方案:   StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // 這裡可以替換為detectAll() 就包括了磁盤讀寫和網絡I/O .penaltyLog() //打印logcat,當然也可以定位到dropbox,�?過文件保存相應的log .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() //探測SQLite數據庫操�? .penaltyLog() //打印logcat .penaltyDeath() .build());    這個StrictMode的設置其實不管用的,     關鍵問題是網絡在主線程的優先級設置,如下所示:   if (android.os.Build.VERSION.SDK_INT > 9) {    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();    StrictMode.setThreadPolicy(policy); }   問題解決了。     這個問題在android 官方的介紹也挺令人困惑的,它提示你請求http不要放在主線程裡,其實我的程序基本上全在handler裡去發起請求;   不過我還沒有把全部handler全部使用AsyncTask 替換掉。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved