zoukankan      html  css  js  c++  java
  • android 子线程更新UI

    参考http://examples.javacodegeeks.com/android/core/os/handler/android-handler-example/
    package
    com.example.test1; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.util.Log; import android.widget.Button; import android.widget.ProgressBar; /* * 使用Handler更新UI * */ public class MyHandlerActivity2 extends Activity { Button button; ProgressBar bar; Handler myHandler; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.startButton); bar=(ProgressBar) findViewById(R.id.bar); new Thread(MyThread).start(); // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据 // Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象 // (2): 让一个动作,在不同的线程中执行. // 它安排消息,用以下方法 // post(Runnable) // postAtTime(Runnable,long) // postDelayed(Runnable,long) // sendEmptyMessage(int) // sendMessage(Message); // sendMessageAtTime(Message,long) // sendMessageDelayed(Message,long) // 以上方法以 post开头的允许你处理Runnable对象 //sendMessage()允许你处理Message对象(Message里可以包含数据,) myHandler = new Handler(){ public void handleMessage(Message msg) { // TODO Auto-generated method stub Log.d("MyHandler", "handleMessage......"); //super.handleMessage(msg); // 此处可以更新UI Bundle b = msg.getData(); int value = b.getInt("value")*10; MyHandlerActivity2.this.bar.setProgress(value); } }; //myHandler.postDelayed(MyThread, 1500); //myHandler.post(MyThread);//并没有启动新线程 } Runnable MyThread =new Runnable() { public void run() { for (int i = 0; i <= 10; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } Log.d("thread.......", "mThread........"); Message msg = new Message(); Bundle b = new Bundle();// 存放数据 b.putInt("value", i); msg.setData(b); //myHandler.sendMessage(myHandler.obtainMessage());//发送的都是0 myHandler.sendMessage(msg); // 向Handler发送消息,更新UI } //myHandler.removeCallbacks(MyThread); } }; }

    方法2

    package com.example.test1;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Looper;
    import android.os.Message;
    import android.util.Log;
    import android.widget.Button;
    import android.widget.ProgressBar;
    /*
     * 使用Handler更新UI
     * */
    public class MyHandlerActivity2 extends Activity {
        Button button;
        ProgressBar bar;  
        Handler myHandler;
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) findViewById(R.id.startButton);
            bar=(ProgressBar) findViewById(R.id.bar);
            new Thread(MyThread).start();
            // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
            // Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象
            // (2): 让一个动作,在不同的线程中执行.
            // 它安排消息,用以下方法
            // post(Runnable)
            // postAtTime(Runnable,long)
            // postDelayed(Runnable,long)
            // sendEmptyMessage(int)
            // sendMessage(Message);
            // sendMessageAtTime(Message,long)
            // sendMessageDelayed(Message,long)
            // 以上方法以 post开头的允许你处理Runnable对象
            //sendMessage()允许你处理Message对象(Message里可以包含数据,)
            myHandler = new Handler(){
                public void handleMessage(Message msg) {
                    // TODO Auto-generated method stub
                    Log.d("MyHandler", "handleMessage......");
                    //super.handleMessage(msg);
                    // 此处可以更新UI
                    Bundle b = msg.getData();
                    int value = b.getInt("value")*10;
                    MyHandlerActivity2.this.bar.setProgress(value);
                }
            };
            //myHandler.postDelayed(MyThread, 1500);
            //myHandler.post(MyThread);//并没有启动新线程
        }
        Runnable MyThread =new  Runnable() {
            public void run() {
                for (int i = 0; i <= 10; i++) {        
                    final int value=i;
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    myHandler.post(new Runnable() {
                        
                        @Override
                        public void run() {
                            //Cannot refer to a non-final variable value inside an inner class defined in a different method
                            //因此value要设置为final
                            bar.setProgress(value*10);
                        }
                    });
                }
            }
        };
    }

  • 相关阅读:
    sql: table,view,function, procedure created MS_Description in sql server
    sql: sq_helptext
    sql:Oracle11g 表,视图,存储过程结构查询
    sql:MySQL 6.7 表,视图,存储过程结构查询
    csharp: MongoDB
    10个出色的NoSQL数据库
    算法习题---3.01猜数字游戏提示(UVa340)
    03--STL算法(常用算法)
    STL函数适配器
    02--STL算法(函数对象和谓词)
  • 原文地址:https://www.cnblogs.com/cart55free99/p/3382710.html
Copyright © 2011-2022 走看看