子线程更新Ui两种方法

来源:互联网 发布:淘宝违禁品怎么防排查 编辑:程序博客网 时间:2024/06/05 02:38

原文http://blog.csdn.net/zoeice/article/details/8060151

Toast只能在主UI线程使用,使用下面的办法可以解决



第一种,使用Looper,不过这种办法会终止,子线程之后的代码,






[java] view plaincopy
Looper.prepare();     
Toast.makeText(aActivity.this,"test",Toast.LENGTH_SHORT).show();  
Looper.loop();  
int k =0;//这句话不会被执行

第二种,就是用 Handler Message


[java] view plaincopy
private final Handler msgHandler = new Handler(){  
        public void handleMessage(Message msg) {  
                switch (msg.arg1) {  
                case R.string.msg_not_network:  
                        Toast.makeText(getApplicationContext(), getResources().getString(R.string.msg_not_network), Toast.LENGTH_SHORT).show();  
                        break;  
                default:  
                        break;  
                }  
        }  
};  


在子线程中使用


[java] view plaincopy
Message msg = msgHandler.obtainMessage();  
msg.arg1 = R.string.msg_not_network;  

msgHandler.sendMessage(msg);  


第三种,就是post加入到主线程处理队列中,这种貌似还是通过Handle机制更新的Ui,我是这样理解的。(第三种方法不是转载的)

继承全局Application

public class MyApplication extends Application

private static Handler mainHandler;//全局的handler

public void onCreate() {

mainHandler = new Handler();

}

public static Handler getMainHandler(){
return mainHandler;
}

在其它Activity中的子线程需要包含更新Ui等操作时可以这样:(并不需要调用Thread类的start()方法哦)

MyApplication.getMainHandler().post(new Runnable() {
@Override
public void run() {
Toast.makeText(CircleActivity.this, "子线程弹框", Toast.LENGTH_SHORT).show();
}
});





0 0
原创粉丝点击