2014-10-29 90 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 
     } 
    } 
} 
相關問題