更新ui-求指点,Handler更新UI线程问题

问题描述

求指点,Handler更新UI线程问题

public Handler mHandler = new Handler() {

    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        super.handleMessage(msg);
        switch (msg.what) {
            case 0x123:
                one.setImageResource(imageIds[currentImageId++]);
                two.setImageResource(imageIds[currentImageId1++]);
                three.setImageResource(imageIds[currentImageId2++]);
                four.setImageResource(imageIds[currentImageId3++]);

                if (currentImageId >= imageIds.length) {
                    currentImageId = 0;
                }
                if (currentImageId1 >= imageIds.length) {
                    currentImageId1 = 0;
                }
                if (currentImageId2 >= imageIds.length) {
                    currentImageId2 = 0;
                }
                if (currentImageId3 >= imageIds.length) {
                    currentImageId3 = 0;
                }

                break;

            default:
                break;
        }
        linearLayout.invalidate();
    }

};
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yaobude);
    initView();

}

public void initView() {
    linearLayout = (LinearLayout)findViewById(R.id.linearlayout);
    one = (ImageView) findViewById(R.id.one);
    two = (ImageView) findViewById(R.id.two);
    three = (ImageView) findViewById(R.id.three);
    four = (ImageView) findViewById(R.id.four);

    one.setOnClickListener(this);
    two.setOnClickListener(this);
    three.setOnClickListener(this);
    four.setOnClickListener(this);

    imageIds = new int[]{
            R.drawable.ee1,R.drawable.ee2,R.drawable.ee3,R.drawable.ee4,R.drawable.mmm2,R.drawable.mmm3
          };

    tt = new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            Message msg = new Message();
            msg.what = 0x123;
            System.out.println("----------"+msg.what);
            mHandler.handleMessage(msg);
        }
    };
    timer.schedule(tt, 0, period);
}

代码如上,为啥还是会报不能更新ui线程的错误呢?求指点 thanks 报错语句:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

解决方案

谢谢楼上 找到原因了 mHandler.handleMessage(msg); - -! mHandler.sendEmptyMessage(msg.what);

解决方案二:

你可以避开这个错误Thread。

AsyncTask 代替Thread。

或者在ImageView中使用post()。

或者在activity使用runOnUiThread()。

时间: 2024-11-01 14:38:23

更新ui-求指点,Handler更新UI线程问题的相关文章

activity-使用 Handler 更新 UI

问题描述 使用 Handler 更新 UI 我实现了一个Android应用程序,,包含四个activity(A,B,C,D) A 调用 B; B调用 C,并且 C调用 D. Activity A 实现了一个Handler Handler handler=new Handler(){ public void handleMessage(Message msg){ Bundle bundle = new Bundle(); bundle = msg.getData(); String key = b

Qt UI界面改了,但UI界面不更新

/**************************************************************************** * Qt UI界面改了,但UI界面不更新 * 声明: * 有时候我们会直接拿别人的Qt项目过来参考修改,但是有时候会遇到UI界面 * 修改了,但是程序运行的时候总是原来的UI界面,这时候需要用uic重新编译一下 * 我们修改了的ui界面文件. * * 2015-10-21 晴 深圳 南山平山村 曾剑锋 ********************

android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高

问题描述 android用的handler更新进度条但是显示不出来并且进度条的高不能改总是那么高 xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layo

android-Android Handler更新界面出错,

问题描述 Android Handler更新界面出错, Handler handler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); ReturnShow.setText(sMsg);//ReturnShow是一个EditText 错误在这里 ReturnShow.setSelection(ReturnShow.length()); } }; class ReadThrea

线程-自定义控件类报错,求指点

问题描述 自定义控件类报错,求指点 如题,报错是这样的错误 08-12 13:03:52.588: E/AndroidRuntime(26278): at com.wujiecao.face_maker.HandWrite.(HandWrite.java:44) 请问是不是线程的问题? 相关代码 public void setbimap(byte[] bytrarry) { originalBitmap = BitmapFactory.decodeByteArray(bytrarry, 0, b

技术-求高手帮忙更新,Greatnews是一个最简洁最好用的RSS订阅器,开发者很久没有更新了;

问题描述 求高手帮忙更新,Greatnews是一个最简洁最好用的RSS订阅器,开发者很久没有更新了; http://www.curiostudio.com/ Greatnews这是本人遇到的最简洁,最好用的桌面RSS Reader了,但开发者10年更新后就停止更新了; 现在的网页开发技术和浏览器的更新,这个RSS工具在打一开网页时就是会提示浏览器需要更新,如:flickr.com这类新WEB技术的网页打开就显示不对,提示要更新:还有这个Reaer的代理设置处可能有一个BUG,设置了它的代理没有用

C++中多线程使用临界区域进行互斥,造成死锁,百思不得其解求指点为啥会死锁

问题描述 C++中多线程使用临界区域进行互斥,造成死锁,百思不得其解求指点为啥会死锁 C++中多线程使用临界区域进行互斥,造成死锁,百思不得其解求指点为啥会死锁 // 在主界面中显示提示信息void CIOCPModel::_ShowMessage(const int columnconst CString szFormat...){ // 根据传入的参数格式化字符串 CString strMessage; va_list arglist; // 处理变长参数 va_start(arglist

串口数据传输-为什么调用不了串口的接收函数呢 只能发送 不能接收? 本人菜鸟,求指点

问题描述 为什么调用不了串口的接收函数呢 只能发送 不能接收? 本人菜鸟,求指点 public partial class Form1 : Form { //SerialPort sp1 = new SerialPort();//声明一个串口类 bool isOpen = false;//打开串口标志位 bool isSetProperty = false;//属性设置标志位 bool isHex = false;//十六进制显示标志位 public Form1() { //sp1.DataRe

在Android中使用Handler和Thread线程执行后台操作

大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候 ,我们会为应用程序专门写一个线程去执行这些复杂的数据操作.通过线程,可以执行例如 :数据处理.数据下载等比较耗时的操作,同时对用户的界面不会产生影响.在Android应用 程序开发中,同样会遇到这样的问题.当我们需要访问网络,从网上下载数据并显示在我们 的UI上时,就会启动后台线程去下载数据,下载线程执行完成后将结果返回给主用户界面线 程. 对于线程的控制,我们将介绍一个Handler类,使用该类可以对运行在不同