Java 创建继承的活动时出现StackOverflower错误
我有一个抽象的CycleActivity,它扩展了活动。我还有一些扩展CycleActivity的其他活动。 创建其中一项活动时,我收到:Java 创建继承的活动时出现StackOverflower错误,java,android,android-activity,Java,Android,Android Activity,我有一个抽象的CycleActivity,它扩展了活动。我还有一些扩展CycleActivity的其他活动。 创建其中一项活动时,我收到: 07-28 19:42:20.850: E/AndroidRuntime(21162): FATAL EXCEPTION: main 07-28 19:42:20.850: E/AndroidRuntime(21162): java.lang.StackOverflowError 07-28 19:42:20.850: E/AndroidRuntime(21
07-28 19:42:20.850: E/AndroidRuntime(21162): FATAL EXCEPTION: main
07-28 19:42:20.850: E/AndroidRuntime(21162): java.lang.StackOverflowError
07-28 19:42:20.850: E/AndroidRuntime(21162): at gospo.plaga.GameActivity.onCreate(GameActivity.java:23)
07-28 19:42:20.850: E/AndroidRuntime(21162): at gospo.plaga.CycleActivity.onCreate(CycleActivity.java:29)
07-28 19:42:20.850: E/AndroidRuntime(21162): at gospo.plaga.GameActivity.onCreate(GameActivity.java:23)
07-28 19:42:20.850: E/AndroidRuntime(21162): at gospo.plaga.CycleActivity.onCreate(CycleActivity.java:29)
07-28 19:42:20.850: E/AndroidRuntime(21162): at gospo.plaga.GameActivity.onCreate(GameActivity.java:23)
这种行为的原因是什么
CycleActivity.java
package gospo.plaga;
import gospo.plaga.game.Game;
import gospo.plaga.game.GameState;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
public abstract class CycleActivity extends Activity
{
private GameState finishAfterGameState;
private Class<?> nextActivityClass;
private Timer gameStateChangeHandler;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
protected void onCreate(Bundle savedInstanceState,
GameState finishAfterGameState, Class<?> nextActivityClass)
{
onCreate(savedInstanceState);
this.finishAfterGameState = finishAfterGameState;
this.nextActivityClass = nextActivityClass;
gameStateChangeHandler = new Timer();
TimerTask gameStateChangeHandlerTask = new TimerTask()
{
@Override
public void run()
{
handleGameStateChange();
}
};
final int GameStateChangeHandlePeriod = 1000;// TODO:
gameStateChangeHandler.schedule(gameStateChangeHandlerTask, 0,
GameStateChangeHandlePeriod);
}
private void handleGameStateChange()
{
Game game = Game.getInstance();
long finishesAt = 0;
GameState[] gameStates = GameState.values();
for (GameState gameState : gameStates)
{
finishesAt += gameState.getDuration();
if (gameState.equals(finishAfterGameState))
{
break;
}
}
if (game.getGameTime() > finishesAt)
{
gameStateChangeHandler.cancel();
runOnUiThread(new Runnable()
{
@Override
public void run()
{
Intent intent = new Intent(getApplicationContext(),
nextActivityClass);
startActivity(intent);
finish();
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.result, menu);
return true;
}
}
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState, GameState.Tour, ResultActivity.class);
...
这里有一个循环引用。你的CycleActivity创建了一个GameActivity,反之亦然,因此你会由于无限递归而耗尽堆栈。这里有一个循环引用。您的CycleActivity创建游戏活动,反之亦然,因此,由于无限递归,堆栈已用完。发布继承的活动代码。该异常将在super.onCreatePost中引发继承的活动代码。该异常将在super中引发。onCreate@Gospo假设
GameActivity
扩展CycleActivity
然后CycleActivity.onCreate(Bundle,GameState,Class)
调用GameActivity.onCreate(Bundle)
再次调用formerohh是的,这应该是super.onCreate(),我的错,谢谢you@Gospo假设GameActivity
扩展CycleActivity
然后CycleActivity.onCreate(捆绑、游戏状态、类)
调用GameActivity.onCreate(Bundle)
它再次调用了前面的函数hh是的,这应该是super.onCreate(),我的错,谢谢