2014-05-08 32 views
0

我知道這個問題已經在SO上被問過很多次了,所以在你投票之前花點時間。我已經通過How to remove application from recent application list?Android:關閉應用程序並從最近的列表中打開它

Quitting an application - is that frowned upon?

Close application and remove from recent apps

和許多其他問題上了SO。

在我的應用程序中,我將用戶登錄詳細信息存儲在SharedPreferences中。基本上,當我的應用程序啓動 - 活動A - 啓動屏幕將顯示從3秒。然後它將轉到活動B - 用戶登錄頁面,登錄時憑證存儲在SharedPreference中。然後它將轉到活動C - 主頁。 我不希望用戶每次輸入登錄詳細信息,因此我將它們存儲在SharedPreference中,如果該值存在,則直接重定向到活動C - 主頁。

所以流動是這樣的,

如果SharedPreference是空

A->B->C 

如果值出現在SharedPreference

A->B->C, I'm checking in Activity B and when the values are present redirect it to C without making the B to come to front. 

,如果我打開所有工作正常應用程序從發射器。但是如果我從最近的列表中打開它,即使這些值存在於SharedPreference中,它也將進入活動B.當我從啓動器或最近列表中打開它時,活動A(啓動畫面)不顯示。只有當我註銷並打開它顯示的應用程序。會有什麼問題?

我累了把<activity android:excludeFromRecents="true">所以迫使它不會出現在最近的名單。即使在此之後,如果我從啓動器打開它,它去到登錄頁面,即活動B.

我重寫這樣的後退按鈕上的活動ç

public void onBackPressed() { 


    if (backPressedOnce) { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
     super.onBackPressed(); 
     return; 
    } 
    this.backPressedOnce = true; 

    Toast.makeText(this, "Please press back again to exit.", Toast.LENGTH_SHORT).show(); 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      backPressedOnce = false; 

     } 
    }, 3000); 



} 

public void onResume() 
{ 
    super.onResume(); 
    this.backPressedOnce = false ; 
} 

所以我有兩個問題

Q1)如何讓用戶每次啓動啓動畫面? Q2)如果從最近的列表中啓動,即使SharedPreference具有值,爲什麼它不會重定向到Activity C?

對不起,要問很長的問題,我知道這是不恰當的。 謝謝

回答

3

我將會把我的想法......

  1. 爲什麼[Rü在B檢查sharedpreference呢?如果你已經存儲在sharedprefernce中,則直接將用戶從A重定向到C。

    如果(sharedPreference) - 「ç

    其他乙 - >ç

    當u從最近推出AFAIK它會調用的onResume,而不是OnCreate中,也相信您在OnCreate中,因此它的檢查
  2. 從最近啓動時不執行,使用日誌知道週期也請參考活動生命週期。

  3. 如果u不需要活動存在U可以調用finish(),並也把noHistory =「真正的」清單中......

PLZ看到這些點,如果我錯了糾正我任何地方...

THX,希望它有助於ü...

+0

我可以看到一個活動,只有當我運行它的第一次,我退出。如果值存在於SharedPreferences中,它不會啓動。 – Aniruddha

+0

請參閱本答案的第2個答案。您可以關閉C並從那裏啓動A.如果屏幕方向改變,這可能會成爲一個問題 - 您無法知道OnResume是由此調用的還是從最近發佈的。哦,順便說一下:從最近發佈的「發佈」實際上只是將應用程序重新放在前面,它從來沒有被首先殺死。如果你想殺死它,你可以在OnPause中使用#3。 – velis

相關問題