Android线程

时间:2011-05-09 13:07:22

标签: android

嘿 所以我对Android很新,我输了,因为虽然我的代码使用AsyncTask来解决这个问题,但是当我运行我的一个类时,我仍然会收到ANR错误。所以这是我的代码的相关方法:

package com.cody.color;

import android.app.Activity;
import android.os.Bundle;


public class Play extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);     
    System.out.println("about to start threader");
    new GuiThreader().execute();
    System.out.println("Threader finished");
    setContentView(R.layout.colorboard_small);
}
}



package com.cody.color;

import android.os.AsyncTask;

public class GuiThreader extends AsyncTask<Void, Void, Void>{

@Override
protected Void doInBackground(Void... params) {
    // TODO Auto-generated method stub
    System.out.println("threader moving");
    GUIdriver game = new GUIdriver();
    game.play();
    return null;
}

}

2 个答案:

答案 0 :(得分:2)

上面的代码没有任何导致ANR的问题,因此很有可能发生以下情况之一:

  • 您正尝试从doInBackground
  • 修改用户界面(UI)
  • 您的doInBackground
  • 发生了异常

如果您在收到错误时发布LogCat输出或堆栈跟踪,则会更容易识别。

答案 1 :(得分:2)

欢迎来到JAVA编程的世界:)当你遇到错误时,你解决它的最佳工具通常是堆栈跟踪。您需要学习如何分析堆栈跟踪并将其包含在您的问题中......

你问的什么是堆栈跟踪?简单的答案是堆栈跟踪是一个错误消息(虽然它包含的信息比仅包含更多信息)。如果出现异常,它会告诉程序员发生了什么,发生了什么以及发生的时间。如果你想在JAVA中编程,你需要让自己熟悉它们。我建议你在深入Android开发之前阅读一些JAVA教程。

至于你的代码,没有堆栈跟踪我不能说更多...除了game.play();看起来它可能包含对UI的一些更改这一事实之外没有明显的错误,这在另一个线程中是不允许的比主线程(这就是为什么AsyncTask有onPostExecute());