0

我有一个关于 Android 应用程序的问题。稍后我想创建一个游戏,我目前正在尝试我需要理解的类和函数。目前我试图掌握如何以一种好的方式使用线程,但是当我触摸按钮时,我的应用程序是“强制关闭”。

对于这个测试应用程序,屏幕上只有一个 TextView 和一个按钮。该按钮在按下时正在调用 threadStart()。(onClick in xml)我想要它做的是创建一个线程,将变量增加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);
    }
}

我的代码基于来自Android 开发人员的示例:常见任务以及如何在“处理 UI 线程中的昂贵操作”标题下执行它们部分。

我很感谢任何帮助。

4

2 回答 2

1

直接传递整数时,setText 无法正常工作。尝试将其转换为 String 之前:

txtCounter1.setText(String.valueOf(value));

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

于 2011-03-04T13:32:53.907 回答
0

如果threadStart是你的 onClick 签名需要

public void threadStart(View v)
于 2011-03-04T13:33:14.667 回答