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
  • 相关阅读:
    判断的几种结构
    关于电脑的基础单词笔记
    JAVA插入数据笔记
    完全卸载oracle11g步骤
    hibernate框架
    Java中的字符串比较
    java集合 list与Set、Map区别
    向MyEclipse的项目中导入js文件时,出现小红叉
    Java基础面试题
    java面试题 -- JVM
  • 原文地址:https://www.cnblogs.com/jianrong-zheng/p/3229896.html
Copyright © 2011-2022 走看看