2012-05-03 35 views
1

基本上我的應用程序有一個登錄屏幕,一旦記錄你可以經歷許多活動。當我按主頁按鈕時,應用程序將在後臺運行,如果用戶在一定時間內未打開它,則用戶會話關閉並返回到登錄屏幕。現在的問題是,如果我想從loginScreen關閉應用程序,一旦我的會話過期,我按下後退鍵,它應該關閉,但它沒有。它將我帶入堆棧中的前一個元素。乾淨的堆棧和退出應用程序onBackPressed()

有線的是,在所有onBackPressed()方法,並當過我開始新的意圖我總是用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 並在loginScreen onBackPressed()我叫finish() 但它不工作。有誰知道爲什麼?以及我如何解決這個問題。

感謝您的幫助!

代碼片段 許多活動:

@Override 
    public void onBackPressed() { 
     mpButtonClick.start(); 
     Intent intent = new Intent(this, MenuPagina.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     super.onBackPressed(); 
    } 
在loginActivity

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     getIntent().setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     LoginActivity.this.finish(); 
    } 
+0

發佈您的代碼,請。 –

+0

編輯它與一些代碼 – Pheonix7

+0

這可能是完全錯誤的,我的一部分愚蠢,但是,這是否有關係super.onBackPressed();在清除意圖/完成之前發生了什麼? – Tony

回答

4

你可以這樣做雙向的:

  1. 殺通過背壓使用android.os.Process.killProcess(android.os.Process.myPid());應用。

爲此,您需要在清單上添加以下權限。

<uses-permission 
     android:name="android.permission.KILL_BACKGROUND_PROCESSES" /> 

2。使用默認爲false的靜態布爾'isKill'變量,並且每次在登錄活動oncreate()方法中設置false。

設置isKill值在登錄活動onBackPress()方法中爲true。

,然後編寫下面的代碼在每一個活動的onResume()方法

if(isKill) 
{ 
    finish(); 
} 
+0

第一種方法是殘酷和快速使用。我已經嘗試過,但不幸的是它不工作....我會嘗試第二種方法,我會讓你知道。 – Pheonix7

+1

我忘記提及第一種方法只有退出應用程序,如果只有一個活動在堆棧上,那麼第二種方法最適合你。我也在礦山項目中使用第二個。 –

+0

我在一些活動中使用了第二種方法,它似乎可行。雖然我把isKill變量放在應用程序中,這樣它就成爲一個全局變量,所有的活動都可以使用它。我會繼續測試它,我會讓你知道... – Pheonix7

0

開始時,我不希望被包含在堆棧中的活動我用:

myintent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

我已閱讀(在這裏某處)關於onBackPressed()沒有調用而是使用onKeyPressed並指定後退按鈕。我會看看我能否找到這個例子。

這裏是例子: Android - onBackPressed() not working

+0

但我確實希望在我的堆棧中有活動。我確實希望能夠回到以前的活動。我只想在會話過期時清除堆棧,即時消息loginActivity我應該按回應用程序應關閉 – Pheonix7

+0

我的錯誤,對不起 – Tony

相關問題