【发布时间】:2016-08-11 17:13:18
【问题描述】:
有没有办法知道活动的 onresume 是因为“后退按钮”而被调用,还是因为内部应用程序在后台而被调用? 我必须记录这些不同的操作:/ 这是场景: 我有 4 个活动 A-B-C-D ;我需要记录活动之间的导航,我不想记录由后台应用程序唤醒引起的 onresume :)
【问题讨论】:
标签: android android-activity activity-lifecycle
有没有办法知道活动的 onresume 是因为“后退按钮”而被调用,还是因为内部应用程序在后台而被调用? 我必须记录这些不同的操作:/ 这是场景: 我有 4 个活动 A-B-C-D ;我需要记录活动之间的导航,我不想记录由后台应用程序唤醒引起的 onresume :)
【问题讨论】:
标签: android android-activity activity-lifecycle
从 Activity A 开始,当您将启动 Activity B/C/D 时,使用和标识符并启动 Activity 以获得结果。
例如:
int ActivityBID = 1;
Intent i = new Intent(this, ActivityB.class);
startActivityForResult(i, ActivityBID );
在您的活动 B 中,您覆盖 onBackPressed:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("activity","B")
setResult(RESULT_OK, intent);
finish();
}
并支持活动 A:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ActivityBID ) {
if(resultCode == RESULT_OK){
String stredittext=data.getStringExtra("activity");
}
}
}
注意:内部 if 和变量不是必需的,因为您已经知道结果来自什么活动,但是,我认为您可能希望在此返回中传递一些数据,所以我离开了。
编辑图片以ActivityForResult为例
【讨论】:
onActivityResult里面登录了,所以只有intent有ActivityResult的时候才会dispatch代码,当你关闭APP的时候不会出现这种情况。您可以创建其他变量,例如 ActivityBID,以识别结果来自哪个 Activity。
startActivityforResult 启动 Activity C,Activity B 就会有结果。我会发布一张带有一些解释的图片
当 Activity 暂停时,onPause() 被调用。在onPause() 中,将正在暂停的Activity 的名称写入全局static 变量中。
当Activity 被恢复时,onResume() 被调用。在onResume 中检查全局static 变量是否包含此Activity 的名称。如果是这样,您可以省略日志,因为此 Activity 刚刚暂停/恢复。
【讨论】:
B.onPause()(会将“B”写入全局),然后调用A.onResume()(会看到全局不是“A”,所以会记录“A”)。你真的试过了吗?
例如,您可以覆盖 onBackPressed() 回调
@Override
public void onBackPressed() {
super.onBackPressed();
/* add your log here */
}
从onResume() 收集日志加上来自onBackPressed() 的日志(如果有),然后您可以检测各种场景。
【讨论】: