2016-08-11 64 views
0

有没有办法知道某个活动的onresume是否因为“后退按钮”或因为内装应用程序在后台而被调用? 我必须记录下这个不同的动作:/ 这是场景: 我有4个活动A-B-C-D;我需要登录活动之间的导航,我不希望记录从背景:)造成应用清醒过来的onResume记录恢复活动的原因

回答

1

从活动A开始活动B/C/D时,使用标识符并开始活动以获得结果。

例如:

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(); 
} 

并备份到活动答:

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"); 
     }  
    } 
} 

注:内如果和变量不是必需的,因为你已经知道你的结果是来自哪个活动,但是,我认为y你可能想在这个回报中传递一些数据,所以我离开了。

编辑图像举例说明ActivityForResult

Imagem

+0

以这种方式,我只写日志,如果在后退按下事件发生?例如:使用这种方法的A-B-C-B如果用户在不返回A的情况下关闭应用程序,我将仅写入B? – aeroxr1

+0

这样,您可以在'onActivityResult'内部登录,因此只有在意图具有ActivityResult时才会调度代码,当您关闭APP时,这种情况不会发生。您可以创建其他变量(如ActivityBID)来识别结果来自的活动。 –

+0

但是在你的代码中只有当用户按下后退按钮时才调用setresult? – aeroxr1

0

例如你可以重写onBackPressed()回调

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    /* add your log here */ 
} 

onResume()收集日志加上来自onBackPressed()的一个(如果有的话),那么你可以检测到各种情况。

+0

我有4个活动A-B-C-D;我需要记录活动之间的导航,我不想记录应用程序从后台唤醒导致的onresume :) – aeroxr1

1

Activity暂停时,onPause()被调用。在onPause()中,将正在暂停的Activity的名称写入全局变量static

Activity恢复时,调用onResume()。在onResume检查全局变量static是否包含此名称Activity。如果是这样,您可以省略日志,因为此Activity刚刚暂停/恢复。

+0

这种方式有一点问题。如果导航为A-B-A-C,则只写A-B-C。 – aeroxr1

+1

否。当从B返回A时,调用B.onPause()(将全局写入“B”),然后调用A.onResume()将会看到全局不是“A “,所以它会记录”A“)。你真的尝试过了吗? –

+0

明天我会尝试,但似乎正确:) – aeroxr1