startActivity new Intent 是否有限制?点击 50 次后,您将无法打开新活动

Is there a limit for startActivity new Intent? After 50 clicks you can't open a new activity

提问人:Umar 提问时间:10/8/2023 更新时间:10/8/2023 访问量:48

问:

我正在制作不同级别的游戏,每个级别都在新活动中。当用户在游戏过程中单击“开始活动”新意向 50 次时,它不会打开新 Activity。例如,级别 1 = 活动 1,因此用户将无法打开级别 51 = 活动 51。如果您在活动之间移动 50 次,您将无法移动第 51 次。我也在另一个应用程序上检查了这个错误,你不能在活动之间切换超过 50 次。知道为什么会有限制以及我如何解决它。帮助将不胜感激。

startActivity(new Intent(this,Level50.class));
java android android-intent 限制 启动活动

评论

0赞 CommonsWare 10/8/2023
“我正在制作具有不同级别的游戏,每个级别都在一个新活动中”——现代 Android 应用程序开发将使用单个活动,每个级别最多有片段或可组合项。大多数游戏甚至不会这样做,而是利用游戏引擎中的功能在屏幕之间导航。

答:

1赞 404NotFound 10/8/2023 #1

从理论上讲,没有这样的限制。但这可能是因为堆栈中有太多活动。您可以尝试使用这些标志从堆栈中删除以前的 Activity。当您开发游戏时,我假设一旦用户完成游戏,您就不需要进入上一级。

Intent intent = new Intent(this, ActivityB.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();

评论

0赞 Umar 10/9/2023
非常感谢。成功了。没有它,问题就是真实的。
0赞 Davit Hovhannisyan 10/8/2023 #2

下面是一个使用片段的简化示例:

public class GameActivity extends AppCompatActivity {
    private int currentLevel = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        loadLevel(currentLevel);
    }

    private void loadLevel(int level) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.fragment_container, LevelFragment.newInstance(level));
        transaction.commit();
    }


    public void moveToNextLevel() {
        currentLevel++;
        if (currentLevel <= 50) {
            loadLevel(currentLevel);
        } else {
            
        }
    }
}