Android 应用生命周期向上和向后
Android app lifecycle Up and Back
我有一个应用程序有一些正常行为,但我仍然不知道我做错了什么。
Activity A 调用 --> Activity B
我将 strings/ints 从一个 activity 传递给另一个 (Intent.putExtra())
我已经将我的活动声明为单个实例,并在我的清单中声明了谁是谁的父级,但是当我打开其他应用程序然后返回我的应用程序时,我所在的 activity 是唯一还活着的。
如果我删除“singleInstance”,那么我的导航可以正常工作,但是从意图(以前的 activity)接收字符串的导航会崩溃。
我希望能够:
- 当我在我的应用程序中时,在我的活动中导航up/back。
- 如果我离开我的应用程序然后回来,仍然可以在我的应用程序中导航up/back。
考虑到我使用 Intent.putExtra("key", "value")
在活动之间传递值
我认为都与 Back/Up 导航和 android:launchMode=["multiple" | 相关。 "singleTop" | "singleTask" | "singleInstance"]但是我找不到完美的解决方案。
更新:
A --> B --> C
A->B: A putExtra; B 得到额外的
B->C:B放Extra; C 获得额外
如果我转到 C,离开应用程序然后返回应用程序,应用程序在 C 中,如果我尝试向上导航到 B,它会崩溃,因为我没有附加功能和activity 已终止。
什么是最好的行为?让他们开着?重新创建它们?
http://developer.android.com/design/patterns/navigation.html
向上按钮会将您带到同一应用程序中的上一个 activity 层次结构。
后退按钮会将您带到您的 phone 所在的上一个 screen/app/activity,而不管它属于哪个应用程序。
据我所知,您必须在字符串数据的第二个 activity 示例中设置条件:
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");
}
您尝试实现的行为是 Android 上的默认行为。所以我相信在你的问题上,少即是多。
AndroidManifest.xml
:
- 从中删除所有
parentActivityName
。真的一点都不多。
- 删除所有
launchMode
那些特定的边缘情况,除非您有特定原因和非默认行为,否则不要使用它们。
intent
您传递给活动的参数不会被任何这些清单细节弄乱,我认为它们与您的问题没有任何关系。在任何 activity 上,您都应该能够调用 getIntent().getExtras()
并访问传递给它的任何参数,无论您退出和进入应用程序多少次。
在 onSaveInstanceState
和 onRestoreInstanceState
期间,您不需要 save/restore 意图参数。这些回调是针对当前状态的,而不是针对传递给它的参数的。这些是不同的东西。
back
:这是自动发生的。调用下一个时不能finish();
上一个activity
up
:这只是覆盖 onOptionsItemSelected
的问题
@Override
public 布尔 onOptionsItemSelected(菜单项){
开关(item.getItemId()){
// 响应操作栏的 Up/Home 按钮
案例android.R.id.home:
结束(); // 到此结束,将显示上一个。
return;
// 其他菜单项 ?
}
}
if I try to navigate up to B, it crashes because I don't have the
extras and the activity has been terminated. What is the best
behaviour? Keep them open? Recreate them?
做 从不 在 Whosebug 上说 "it crashes" 而不提供堆栈跟踪和该堆栈跟踪周围的代码行。这是我给别人投反对票的主要原因之一。
如果它崩溃了,询问那个崩溃,不要搞乱自动默认导航到 "try to fix it"
我有一个应用程序有一些正常行为,但我仍然不知道我做错了什么。
Activity A 调用 --> Activity B 我将 strings/ints 从一个 activity 传递给另一个 (Intent.putExtra()) 我已经将我的活动声明为单个实例,并在我的清单中声明了谁是谁的父级,但是当我打开其他应用程序然后返回我的应用程序时,我所在的 activity 是唯一还活着的。 如果我删除“singleInstance”,那么我的导航可以正常工作,但是从意图(以前的 activity)接收字符串的导航会崩溃。
我希望能够:
- 当我在我的应用程序中时,在我的活动中导航up/back。
- 如果我离开我的应用程序然后回来,仍然可以在我的应用程序中导航up/back。
考虑到我使用 Intent.putExtra("key", "value")
在活动之间传递值我认为都与 Back/Up 导航和 android:launchMode=["multiple" | 相关。 "singleTop" | "singleTask" | "singleInstance"]但是我找不到完美的解决方案。
更新: A --> B --> C A->B: A putExtra; B 得到额外的 B->C:B放Extra; C 获得额外
如果我转到 C,离开应用程序然后返回应用程序,应用程序在 C 中,如果我尝试向上导航到 B,它会崩溃,因为我没有附加功能和activity 已终止。 什么是最好的行为?让他们开着?重新创建它们?
http://developer.android.com/design/patterns/navigation.html
向上按钮会将您带到同一应用程序中的上一个 activity 层次结构。 后退按钮会将您带到您的 phone 所在的上一个 screen/app/activity,而不管它属于哪个应用程序。
据我所知,您必须在字符串数据的第二个 activity 示例中设置条件:
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");
}
您尝试实现的行为是 Android 上的默认行为。所以我相信在你的问题上,少即是多。
AndroidManifest.xml
:
- 从中删除所有
parentActivityName
。真的一点都不多。 - 删除所有
launchMode
那些特定的边缘情况,除非您有特定原因和非默认行为,否则不要使用它们。
intent
您传递给活动的参数不会被任何这些清单细节弄乱,我认为它们与您的问题没有任何关系。在任何 activity 上,您都应该能够调用 getIntent().getExtras()
并访问传递给它的任何参数,无论您退出和进入应用程序多少次。
在 onSaveInstanceState
和 onRestoreInstanceState
期间,您不需要 save/restore 意图参数。这些回调是针对当前状态的,而不是针对传递给它的参数的。这些是不同的东西。
back
:这是自动发生的。调用下一个时不能finish();
上一个activity
的问题up
:这只是覆盖onOptionsItemSelected
@Override public 布尔 onOptionsItemSelected(菜单项){ 开关(item.getItemId()){ // 响应操作栏的 Up/Home 按钮 案例android.R.id.home: 结束(); // 到此结束,将显示上一个。 return; // 其他菜单项 ? } }
if I try to navigate up to B, it crashes because I don't have the extras and the activity has been terminated. What is the best behaviour? Keep them open? Recreate them?
做 从不 在 Whosebug 上说 "it crashes" 而不提供堆栈跟踪和该堆栈跟踪周围的代码行。这是我给别人投反对票的主要原因之一。
如果它崩溃了,询问那个崩溃,不要搞乱自动默认导航到 "try to fix it"