zoukankan      html  css  js  c++  java
  • 安卓开发解决android.os.NetworkOnMainThreadException异常方法(主线程不能直接调用webservice)

    安卓开发解决android.os.NetworkOnMainThreadException异常方法  

    2013-01-07 14:01:04|  分类: 技术 |  标签:安卓  技术  java  |举报|字号 订阅

     
     
    在android 2.3上访问网络的方法,在android 4.0上运行时报android.os.NetworkOnMainThreadException异常,主要问题在于4.0中访问网络不能在主线程中进行,有两个方法可以解决。
    第一种是在主线程中增加如下代码[不推荐]:
    // 详见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());
    第二种方法是启动异步线程执行[推荐]:
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 启动线程执行下载任务
    new Thread(downloadRun).start();
    }

    /**
    * 下载线程
    */
    Runnable downloadRun = new Runnable(){
    @Override
    public void run() {
    // TODO Auto-generated method stub
    updateListView();
    }
    };

    或者您也可以直接让业务方法实现Runnable接口,然后用 new Thread(您的方法名).start()来启动。
  • 相关阅读:
    【批处理】for命令
    【批处理】if命令,注释方式
    【批处理】choice命令,call 命令,start 命令,rem
    LoadLibrary加载动态库失败
    编译器如何实现静态变量只初始化一次
    汇编语言中 cs, ds,ss 的区别
    变量在内存中的位置
    call和ret指令
    函数调用
    浮动
  • 原文地址:https://www.cnblogs.com/zmc/p/4021323.html
Copyright © 2011-2022 走看看