zoukankan      html  css  js  c++  java
  • Andorid中子线程更新主线程方法

      子线程更新主线程的方法有很多,在此我只罗列了我用到的两种,其他方法大家可以去询问度娘。

    方法一

      在子线程中直接利用此方法

     new Handler(MainActivity.mainaction.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                //此处做更新ui处理 iv_wangka.setImageBitmap(ImageDealUtil.readBitMap(MainActivity.getMainaction(), R.mipmap.wifi_4,
    true)); } });
    //若是在Active中也可用下面的这种方法
     runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                      mTvTest.setText("runOnUIThread");
                    }
                });

    方法二

    在子线程中利用Handler发送信息,然后利用Handerl接收消息通知主线程更新UI

    package ispring.com.testhandler;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    
    
    public class MainActivity extends Activity implements Button.OnClickListener {
    
        private TextView statusTextView = null;
    
        //uiHandler在主线程中创建,所以自动绑定主线程
        private Handler uiHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case 1:
                        System.out.println("handleMessage thread id " + Thread.currentThread().getId());
                        System.out.println("msg.arg1:" + msg.arg1);
                        System.out.println("msg.arg2:" + msg.arg2);
                        MainActivity.this.statusTextView.setText("文件下载完成");
                        break;
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            statusTextView = (TextView)findViewById(R.id.statusTextView);
            Button btnDownload = (Button)findViewById(R.id.btnDownload);
            btnDownload.setOnClickListener(this);
            System.out.println("Main thread id " + Thread.currentThread().getId());
        }
    
        @Override
        public void onClick(View v) {
            DownloadThread downloadThread = new DownloadThread();
            downloadThread.start();
        }
    
        class DownloadThread extends Thread{
            @Override
            public void run() {
                try{
                    System.out.println("DownloadThread id " + Thread.currentThread().getId());
                    System.out.println("开始下载文件");
                    //此处让线程DownloadThread休眠5秒中,模拟文件的耗时过程
                    Thread.sleep(5000);
                    System.out.println("文件下载完成");
                    //文件下载完成后更新UI
                    Message msg = new Message();
                    //虽然Message的构造函数式public的,我们也可以通过以下两种方式通过循环对象获取Message
                    //msg = Message.obtain(uiHandler);
                    //msg = uiHandler.obtainMessage();
    
                    //what是我们自定义的一个Message的识别码,以便于在Handler的handleMessage方法中根据what识别
                    //出不同的Message,以便我们做出不同的处理操作
                    msg.what = 1;
    
                    //我们可以通过arg1和arg2给Message传入简单的数据
                    msg.arg1 = 123;
                    msg.arg2 = 321;
                    //我们也可以通过给obj赋值Object类型传递向Message传入任意数据
                    //msg.obj = null;
                    //我们还可以通过setData方法和getData方法向Message中写入和读取Bundle类型的数据
                    //msg.setData(null);
                    //Bundle data = msg.getData();
    
                    //将该Message发送给对应的Handler
                    uiHandler.sendMessage(msg);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    navicat连接腾讯云服务器mysql
    腾讯云服务器部署1
    域名的注册使用
    python入门1-3章节
    轮播图的实现
    前端起步
    redis部署到云服务器上的一些坑
    面向对象第三单元总结
    面向对象课程第二单元总结
    面向对象课程第一单元总结
  • 原文地址:https://www.cnblogs.com/zblwyj/p/11268106.html
Copyright © 2011-2022 走看看