【问题标题】:Android app lifecycle Up and BackAndroid 应用生命周期 Up and Back
【发布时间】:2015-03-04 14:53:07
【问题描述】:

我的应用有一些正常行为,但我仍然不知道我做错了什么。

Activity A 调用 --> Activity B 我将字符串/整数从一个活动传递到另一个活动(Intent.putExtra()) 我已将我的活动声明为单个实例,并在清单中声明谁是谁的父级,但是当我打开其他应用程序然后返回我的应用程序时,我所在的活动是唯一还活着的活动。 如果我删除了“singleInstance”,那么我的导航可以正常工作,但从意图(先前活动)接收字符串的导航会崩溃。

我希望能够:

  • 当我在我的应用中时,向上/向后浏览我的活动。
  • 如果我离开我的应用并返回,仍然可以在我的应用中向上/向后导航。

考虑到我使用 Intent.putExtra("key", "value") 在活动之间传递值

我认为都与 Back/Up Navigation 和 android:launchMode=["multiple" | “单顶” | “单任务” | "singleInstance"] 但我找不到完美的解决方案。

更新: A --> B --> C A->B:A putExtra; B 获得额外的 B->C:B放额外; C得到额外的

如果我去 C,离开应用程序,然后返回应用程序,应用程序在 C 中,如果我尝试导航到 B,它会崩溃,因为我没有额外的东西并且活动有被终止。 最好的行为是什么?让它们保持开放?重新创建它们?

【问题讨论】:

  • 为什么不关注崩溃的原因,而不是通过更改意图标志来“修复”它?
  • 因为它的工作方式不允许我在退出应用程序并返回后浏览我的应用程序,这意味着即使它没有崩溃也有问题

标签: android android-activity backup task instance


【解决方案1】:

您尝试实现的行为是 Android 上的默认行为。所以我相信关于你的问题,少即是多。

AndroidManifest.xml:

  • 从中删除所有parentActivityName。真的没有什么大不了的。
  • 删除所有launchMode 那些特定的边缘情况,除非您有特定的原因和非默认行为,否则不要使用它们。

intent 您传递给活动的参数不会被任何这些清单细节弄乱,我认为它们与您的问题没有任何关系。在任何活动中,您都应该能够调用 getIntent().getExtras() 并访问传递给它的任何参数,无论您退出和进入应用程序多少次。

onSaveInstanceStateonRestoreInstanceState 期间,您不需要保存/恢复意图参数。这些回调是针对当前状态的,而不是针对传递给它的参数的。这些是不同的东西。

  • back:这是自动发生的。调用下一个活动时,您不能finish(); 上一个活动。
  • up:这只是覆盖onOptionsItemSelected的问题

    @覆盖 public boolean onOptionsItemSelected(MenuItem item) { 开关(item.getItemId()){ // 响应操作栏的向上/主页按钮 案例android.R.id.home: 结束(); // 这完成了,前一个将被显示。 返回; // 其他菜单项 ? } }

如果我尝试向上导航到 B,它会崩溃,因为我没有 演员和活动已终止。哪个最好 行为?让它们保持开放?重新创建它们?

永远不要在 StackOverflow 上说“它崩溃”,而不提供堆栈跟踪和该堆栈跟踪周围的代码行。这是我投反对票的主要原因之一。

如果崩溃,请询问有关崩溃的情况,不要将自动默认导航弄乱为“尝试修复它”

【讨论】:

  • 下次再​​做。您的解决方案实际上有效,删除了所有内容,我只是使用 BACK 按钮执行 UP。现在,我想知道APP中的导航UP是否正确。我的意思是,用户是否要让它上升你必须反击?
【解决方案2】:

如果我理解您必须在字符串数据的第二个活动示例中设置条件:

if(intent != null){
yourString = intent.getStringExtra("count");
}

那么你必须提供像这样的保存实例

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("count", yourString);//or int or other look on developers
  }

并从实例中恢复

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    yourString = savedInstanceState.getString("count");
  }

【讨论】:

  • 这看起来好多了。我会试试的。
【解决方案3】:

http://developer.android.com/design/patterns/navigation.html

向上按钮将您带到同一应用程序中分层的上一个活动。 无论它属于哪个应用程序,后退按钮都会将您带到您手机上的上一个屏幕/应用程序/活动。

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2011-06-02
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多