嘿 所以我对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;
}
}
答案 0 :(得分:2)
上面的代码没有任何导致ANR
的问题,因此很有可能发生以下情况之一:
doInBackground
doInBackground
如果您在收到错误时发布LogCat
输出或堆栈跟踪,则会更容易识别。
答案 1 :(得分:2)
欢迎来到JAVA编程的世界:)当你遇到错误时,你解决它的最佳工具通常是堆栈跟踪。您需要学习如何分析堆栈跟踪并将其包含在您的问题中......
你问的什么是堆栈跟踪?简单的答案是堆栈跟踪是一个错误消息(虽然它包含的信息比仅包含更多信息)。如果出现异常,它会告诉程序员发生了什么,发生了什么以及发生的时间。如果你想在JAVA中编程,你需要让自己熟悉它们。我建议你在深入Android开发之前阅读一些JAVA教程。
至于你的代码,没有堆栈跟踪我不能说更多...除了game.play();
看起来它可能包含对UI的一些更改这一事实之外没有明显的错误,这在另一个线程中是不允许的比主线程(这就是为什么AsyncTask有onPostExecute()
);