程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> android-HandlerThread怎麼更新ui

android-HandlerThread怎麼更新ui

編輯:編程解疑
HandlerThread怎麼更新ui

HandlerThread怎麼更新ui,我試了很多方法,都不能更新ui,求大神們指導一下

 HandlerThread handlerThread = new HandlerThread(getMainLooper().toString());
        handlerThread.start();
        MyHandler myHandler = new MyHandler(handlerThread.getLooper());
        Message message = myHandler.obtainMessage();
        message.sendToTarget();

                public class MyHandler extends Handler {
    public MyHandler(Looper looper){
        super(looper);
    }
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
    }
} 

在handleMessage(Message msg)方法裡怎麼不能更新ui

最佳回答:


handler.send(Message message),或者handler.post (Runnable r);
2.View.post(Runnable r);

/**

  • 更新UI方法之 view.post(Runnable r)
  • @author vincentTung
  • */
    class ViewPostThread extends Thread{

    @Override 
    public void run() { 
        super.run(); 
        while(count<101){ 
            /** 
             * view.post(Runnable) 
             */ 
            bar.post(new Runnable() { 
    
                @Override 
                public void run() { 
                    isChanging = true; 
                    bar.setProgress(count); 
                    count++; 
    
                }}); 
    
            /** 
             * view.postDelayed(Runnable,delayTime) 
             */ 
    

    // bar.postDelayed(new Runnable() {
    //
    // @Override
    // public void run() {
    // isChanging = true;
    // bar.setProgress(count);
    // count++;
    //
    // }},100);
    //

    try {
    Thread.sleep(100);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    } 
    

    }
    3.Activity的RunOnUIThread(Runnable r);
    class ViewPostThread extends Thread{

    @Override 
    public void run() { 
        super.run(); 
        while(count<101){ 
            runOnUiThread(new Runnable() { 
    
                @Override 
                public void run() { 
                    isChanging = true; 
                    bar.setProgress(count); 
                    count++; 
    
                }}); 
    
            try { 
                Thread.sleep(100); 
            } catch (InterruptedException e) { 
                e.printStackTrace(); 
            } 
        } 
    
    } 
    

    }
    4.通過HandlerThread進行更新

/**

  • 更新UI方法之
  • ---- HandlerThread
  • HandlerThread與普通Thread的區別是,普通Thread 默認不帶Looper的,
  • 需要調用Looper.prepare()方法為線程分配出有一個Looper,然後通過Looper.loop()方法讓Looper轉起來,循環分發消息Message
  • 而HandlerThread就可以看作是默認就非配有Looper的線程Thread
  • 1.在子線程中聲明Handler
  • 2.在子線程的run()方法中:Looper.prepare();//為子線程分配一個Looper
  • 3.在子線程的run()方法中:處理操作,並發送Message
  • 4.在子線程的run()方法中: Looper.loop();//讓Loop轉起來
  • @author vincentTung
  • */

    private HandlerThread handlerThread =new HandlerThread("handler_thread"){

    private Handler handler = new Handler(){ 
    
        public void handleMessage(android.os.Message msg) { 
            count++; 
            bar.setProgress(count); 
            if(count==100){ 
    
                Toast.makeText(HandlerThreadTest.this, "Done", 1).show(); 
            } 
        }; 
    }; 
    

    使用時候調用
    handlerThread.start();
    5.在子線程中更新,前提是得Loop.prepare( );

/**

  • 更新UI方法之
  • ---- 帶Looper的子線程
  • 1.在子線程中聲明Handler
  • 2.在子線程的run()方法中:Looper.prepare();//為子線程分配一個Looper
  • 3.在子線程的run()方法中:處理操作,並發送Message
  • 4.在子線程的run()方法中: Looper.loop();//讓Loop轉起來
  • @author vincentTung
  • */
    class NormalThread extends Thread{
    private int count=0;
    private Handler handler = new Handler(){
    public void handleMessage(android.os.Message msg) {
    count++;
    bar.setProgress(count);
    };};
    @Override
    public void run() {
    super.run();
    Looper.prepare();
    while(count<=100){

                handler.sendEmptyMessage(0); 
                try { 
                    Thread.sleep(100); 
                } catch (InterruptedException e) { 
                    e.printStackTrace(); 
                } 
    
            } 
            Looper.loop(); 
        } 
    

    }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved