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() 中的无限循环的主要内容,如果未能解决你的问题,请参考以下文章