我的Thread() - 代码有什么问题?

时间:2011-03-04 13:13:04

标签: android multithreading handler runnable

我对Android应用程序有疑问。我想,稍后,创建一个游戏,我目前正在尝试我需要理解的类和功能。 目前我试图抓住如何以良好的方式使用线程,但当我触摸按钮时,我的应用程序是“强行关闭”。

对于此测试应用程序,屏幕上的所有内容都是一个TextView和一个按钮。 按下按钮时调用threadStart()。 (onClick in xml) 我想要它做的是创建一个线程,将变量 value 增加1,然后向UI线程报告,然后用新值更新textview。

有人可以通过这些小代码看到我做错了吗?


package com.weldeborn.tc;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;

public class ThreadCounter extends Activity {

    TextView txtCounter1;

    int value=0;
    final Handler mHandler = new Handler();
    final Runnable mUpdateResults = new Runnable() {
        public void run() {
            updateResult();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        txtCounter1 = (TextView) findViewById(R.id.counter1);

    }

    protected void threadStart() {
        Thread t = new Thread() {
            public void run() {
                doSomething();
                mHandler.post(mUpdateResults);
            }
        };
        t.start();
    }

    private void doSomething() {
        value = value+1;
    }

    private void updateResult() {
        txtCounter1.setText(value);
    }
}

我的代码基于“处理UI线程中的昂贵操作”标题下的Android Developer: The Common Tasks and how to do them部分中的示例。

我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

直接传递整数时,

setText无法正常工作。尝试在之前将其转换为String:

txtCounter1.setText(将String.valueOf(值));

另外,请检查this answer有关需要更新UI的线程的使用情况。

答案 1 :(得分:0)

如果您点击threadStart,则签名需要

public void threadStart(View v)