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

问题描述:

我对Android应用程序有疑问。我想在稍后创建一个游戏,并且我正在尝试需要了解的类和函数。 现在我试图掌握如何以一种好的方式使用线程,但我的应用程序是“强制关闭”,当我触摸按钮。我的Thread()代码有什么问题?

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

有人可以看到我做错了这个小代码片吗?


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部分的例子。

我很感激任何帮助。

+1

没有logcat的错误输出,您将永远无法调试程序。谷歌它,使用它。另外如果你有XML代码,你应该使用它。 – Klaus 2011-03-04 13:23:44

+0

但你的onclickListener在哪里? – 2011-03-04 13:27:56

+0

在buttonView(在main.xml文件中)我使用android:onClick =“threadStart”。我认为它的作用是实现一个onCliclListener,它已经为我以前的应用程序工作过。 – Weldeborn 2011-03-04 14:09:16

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

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

此外,请检查this answer有关需要更新UI的线程的用法。

如果threadStart是你的onClick签名必须

public void threadStart(View v) 
+0

感谢您的快速解答!我还没有设法解决它,但我会读取建议的链接,并纠正我错过的int-String问题。 – Weldeborn 2011-03-04 14:11:03

+0

我以前做过,但是这次我错过了。谢谢! – Weldeborn 2011-03-04 15:04:15