zoukankan      html  css  js  c++  java
  • android 多线程

    最近在做android项目的时候经常要用到比较耗时的操作,一但操作的时间过长,比如超过一分钟那么就会造成UI阻塞,界面假设的状况。那么我们就要用到多线程,其实多线程原理很简单,每个Activity可以算作是一个进程,进程里面有一个主线程在运行,那么我们只需要在主线程中开一个子线程将那些耗时长的操作丢进去就可以了。在这里如果直接在子线程中的操作完成了之后就更新UI,那么就抛出异常,原因在于不能直接在子线程中对主线程UI操作。我们可以操作的是发送一个消息给主线程,让主线程来更新UI。这中间涉及到了一个消息机制,就要用到android自带的Handle机制。下面这个是最简单的例子:

    以我们经常接触到的下载为例子,开始的时候用一个用一个textview显示准备下载,下载的时候显示下载中,下载完成之后显示下载完成三种不同状态。

     

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textView=(TextView) findViewById(R.id.tv);
    checkUpdate.start();
    textView.setText("准备下载...");
    }
    
    //实例化Handler
    private Handler mHandler = new Handler() {
    //接收子线程发来的消息,同时更新UI
    public void handleMessage(Message msg) {
    
    textView.setText("歌词下载完成。");
    }
    };
    
    //实例化新的线程
    private Thread checkUpdate = new Thread() {
    
    @Override
    public void run() {
    Looper.prepare(); 
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    //向主线程发送消息
    mHandler.sendMessage(mHandler.obtainMessage());
    }
    };

    注意:异步提交的时候开了线程也是无效的。

    来源于:

    http://www.cnblogs.com/tanlon/archive/2011/03/11/1981759.html
  • 相关阅读:
    vue-cli router的使用
    vue element new vue const
    mac terminal update management pack
    关于MAC升级后,vim更新插件报错
    flex入门----基础知识
    常用的flex知识 ,比起float position 好用不少
    npm 安装nodesass 或者包含nodesass的脚手架工具报错问题
    anglar cli的 rxjs_1.of is not a function
    npm node sass 安装报错
    axios ajax fetch 区别
  • 原文地址:https://www.cnblogs.com/jianrong-zheng/p/3229896.html
Copyright © 2011-2022 走看看