1

我有一个 Android Activity,有时由用户启动,有时由服务启动。从服务启动时(通过发送我的活动 onNewIntent() 回调接收到的 Intent),我只希望它在已运行时更新其屏幕,但如果尚未运行则不开始运行。

我尝试实现这一目标的方法是在 onResume() 期间在我的 Activity 中设置一个布尔值并在 onPause() 期间清除但我注意到 onPause() 总是在我的 Activity 接收到它的 onNewIntent() 之前被调用,所以值总是错误的。

对于那些不熟悉事件顺序的人,如下所示:

startActivity(myIntent); // Called from service with Intent Extra indicating that fact

onPause(); // Overriden method for my Activity

onNewIntent(Intent myIntent); // Overriden method for my Activity

onResume(); // Overriden method for my Activity

从阅读中我的理解是,这种行为是固定的和有意的,没有办法绕过它。我看到的一个建议是计算 onPause() 和 onNewIntent() 被调用之间的时间间隔,并将其用作我的 Activity 是否在 onNewIntent() 之前立即运行的估计,但我希望这里的人可能知道更好的方法?

我实际上使用的是片段而不是普通的活动,但这并没有改变任何重要的事情。

谢谢,

4

1 回答 1

2

如果您只想知道您的活动是否已经在前台,那么将尝试以下代码段:

class MyActivity extends Activity {
    private boolean isLaunched;

    @Override
    protected void onStart() {
        super.onStart();
        isLaunched = true;
    }

    @Override
    protected void onStop() {
        super.onStop();
        isLaunched = false;
    }

    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (isLaunched) {
           //todo 
        }
        else
        {
           //somethin here
        }
    }
}
于 2014-10-29T15:39:58.270 回答