• 安卓开发解决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()来启动。
  • 相关阅读:
    mysql六:数据备份、pymysql模块
    mysql三:表操作
    mysql四:数据操作
    剑指offer-数组
    剑指offer-回溯
    中缀表达式到后缀表达式的转换
    大数取余算法的证明及实现
    Windows下匿名管道进程通信
    Windows下使用命令行界面调用VS2015编译器编译C++程序方法
    6 个技巧,提升 C++11 的 vector 性能
  • 原文地址:https://www.cnblogs.com/zmc/p/4021323.html
Copyright © 2020-2023  润新知