2014-10-29 87 views
1

我有一个Android Activity,有时是由用户启动的,有时是从一个服务启动的。从服务启动时(通过发送由我的Activities onNewIntent()回调接收的Intent),我只是希望它在已经运行的情况下更新其屏幕,但如果它尚未运行则不会开始运行。我试图实现这一目标已经安排在onResume()期间在我的Activity中设置布尔值并在onPause()期间清除,但我注意到在我的Activity接收到onNewIntent()之前总是调用onPause()该值总是假的。当onNewIntent()被调用时如何检测我的Android Activity是否已经运行?

对于那些不熟悉它是如下的事件序列:

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()之前立即运行的估计,但我希望这里有人可能知道更好的方法?

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

感谢,

+1

'myIntent.putExtra(“FROM_SERVICE”,真)'服务Activity然后'onNewIntent'' boolean was_from service = myIntent.getBooleanExtra(“FROM_SERVICE”,false);'如果Activity没有启动,那么第一个'onCreate'将被调用... – Selvin 2014-10-29 15:39:49

回答

1

如果你只想知道你是否在前台活动已经然后会尝试这个片段:在开始之前

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 
     } 
    } 
} 
相关问题