如何在调用onNewIntent()时检测我的Android活动是否已经在运行



我有一个Android活动,有时由用户启动,有时从服务启动。当从服务启动时(通过发送我的Activities onNewIntent()回调收到的Intent),我只希望它在已经运行的情况下更新屏幕,但如果它还没有运行,就不要开始运行。

我试图实现这一点的方法是在onResume()期间在我的"活动"中设置一个布尔值,并在onPause()期间清除该布尔值,但我注意到,在我的活动接收到onNewIntent()之前,onPause总是被调用的,因此值总是false。

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

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()之间的间隔进行计时,并用它来估计我的活动是否在onNewIntnt()之前立即运行,但我希望这里的人能知道更好的方法?

事实上,我使用的是碎片,而不是简单的活动,但这并没有改变任何意义。

谢谢,

如果你只想知道你的活动是否已经在前台,那么就试试这个片段:

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
        }
    }
}

相关内容

  • 没有找到相关文章