onCreate() 中的无限循环

Posted

技术标签:

【中文标题】onCreate() 中的无限循环【英文标题】:Endless loop in onCreate() 【发布时间】:2021-12-04 11:03:04 【问题描述】:

我有以下代码:

AppA

@Override
protected void onCreate(Bundle savedInstanceState) 
    ...
    Intent i = getIntent();
    if (i.hasExtra("Key")) 
        Intent i1 = new Intent();
        i1.putExtra("Key", someValue);
        i1.setComponent(new ComponentName("com.example.AppB", "com.example.AppB.MainActivity"));
        startActivity(i1);
        finishAffinity();
    

AppB

@Override
protected void onCreate(Bundle savedInstanceState) 
    ...
    // The following code executes only on a new install of the app
    Intent i = new Intent();
    i.putExtra("Key", "1");
    i.setComponent(new ComponentName("com.example.AppA", "com.example.AppA.MainActivity");
    starActivity(i);
    finishAffinity();
    
    // The following keeps executing in an endless loop
    Intent i1 = getIntent();
    if (i1.hasExtra("Key")) 
        long temp = i1.getLongExtra("Key", -1);
        recreate();
    

一切正常(我成功地从 AppA 获得了值),除了上面注释的代码一直在无限循环中执行。我尝试将recreate() 更改为startActivity(getIntent())finish(),但得到了相同的结果。

【问题讨论】:

【参考方案1】:

您是说以下代码仅在应用程序的新安装时执行,但您是否对其进行了实际检查?根据这段代码 sn-p 对我来说,您似乎只是在两个应用程序之间来回传递数据,这就是您看到“无限循环”的原因。

如果不是这种情况,并且您在启动任何一个应用程序之前确实进行了一些检查,我会在您使用 removeExtra("Key") 读出后尝试从应用程序 b 中的附加功能中删除密钥。

【讨论】:

是的,我检查了一下。我正在从 AppA 中检索一个值。 然后在重新创建活动之前从意图中删除值 我修复了使用startActivity(new Intent(this, MainActivity.class),后跟finish()。哪个更好(安全),我的还是你的(removeExtra() 后跟 recreate())?

以上是关于onCreate() 中的无限循环的主要内容,如果未能解决你的问题,请参考以下文章

检查空无限循环中的选项与做一些无限循环

while循环中的Javascript continue语句导致无限循环

如何从循环外部杀死处于无限循环中的 pthread?

如何打破 C 中的无限 for(;;) 循环?

Python中的无限While循环

C/C++ 中的无限循环 [关闭]