2016-11-24 61 views
0

方案 - 我沒有將我的應用程序在後臺運行。我有一個爲ACTION_USER_PRESENT實現的接收器。在這種接收機我開始一個活動,其明顯的設置是:當我明確地完成它時,我的活動從最近重新啓動.android

<activity android:name=".activity.MyActivityB" 
    android:excludeFromRecents="true" 
    android:noHistory="true" 
    android:screenOrientation="portrait"/> 

這是因爲旗幟在它爲我學分給用戶,我不希望用戶能夠再次重新啓動後才爲同一個橫幅。

我完成暫停時的活動,因爲我想盡快關閉它,只要用戶離開它。

但是,使用Nexus設備時,當我按最近按鈕,然後活動顯示在最近,並再次按下它的活動重新創建。

,但發生的事情是當活動是在前臺和我按下最近通話按鈕,那麼活動要完成,因爲我曾呼籲這一點:

@Override 
protected void onPause() { 
System.out.println("MyActivityB onpause called "); 
    super.onPause(); 
    bannerShown = false; 
    if(!isFinishing()) 
     finish(); 
} 

但活動亙古不被可能結束並重新創建時我再次按最近按鈕。

這不是在三星設備中,而只在具有最近的應用程序按鈕(即方形)的Nexus設備中。

+0

這是因爲活動在Nexus設備上仍然活動(onPause()未被調用)。這些設備上安裝的啓動器就是這個問題。換句話說,您無法識別用戶是否打開最近的菜單。但是,當您從最近的菜單切換應用程序時,它將被調用,因爲該活動現在處於後臺。另外,當應用程序將被中間的按鈕關閉時,活動將在後臺進行。 – Larcado

+0

我檢查日誌暫停和onWindowFocusChanged都被調用,當用戶點擊最近按鈕,但仍然完成後,活動還沒有完成();在它 – beginner

回答

0

您可以使用savedInstanceState:

https://developer.android.com/training/basics/activity-lifecycle/recreating.html

它用於一些延遲後恢復活動,並重新創建對象,但它們必須是可序列化。您可以在此處使用它來通過布爾值保存活動狀態。

private static final String ACTIVITY_STATE = "activityState"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Check whether it's firstly opened or recreated 
    if (savedInstanceState != null) { 
     if(savedInstanceState.getBoolean(ACTIVITY_STATE)) { 
      // recreated => force close 
      finish(); 
     } 
    } else { 
     // first opend 

    } 
    ... 
} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Saves that it was open already 
    savedInstanceState.putBoolean(ACTIVITY_STATE, true); 
    super.onSaveInstanceState(savedInstanceState); 
} 
+0

它不工作。當我再次按最後一個按鈕時,所有的值,無論是在意圖還是在變量中都會自動保存。這種方法被稱爲但不設置任何東西。該捆綁仍爲空 – beginner

相關問題