2015-08-27 113 views
0

我有2個活動,一個4位數字引腳樣式登錄活動(MainActivity)和一個內容活動。每次運行應用程序時都要重新啓動應用程序?

這個應用程序存儲隱私信息,以及在恢復活動時不應該看到的內容,因此我希望應用程序在每次啓動時都要在登錄活動中重新啓動,而不是從停止的地方繼續。

我已經嘗試過在內容活動的onStop()和onResume方法中搞亂,但這些似乎是非常不可靠的,因爲有時當我有onRestart設置重新啓動登錄活動時,它將不會啓動它,並且要求在onStop()中激活登錄屏幕將阻止我能夠完成後臺任務,例如保存數據。

有什麼我可以添加到這個清單文件,將告訴該應用從登錄活動重啓不管是什麼?一個在這樣的一個應用程序工作時可能發生的最糟糕的事情是,信息是比不是被迫登錄業主以外的其他人訪問..

+0

我不認爲這是在清單一樣,任何選項...你需要在此改變的onStop和的onResume methods..and想出一個辦法,讓你的應用程序知道什麼時候被認證.... –

+0

我「會大概只需要設置的onStop方法每個必要的時間來拉起loginscreen,唯一的問題是,從我的內容活動中,用戶能夠將大量圖像上傳到會被存儲在應用程序的應用程序通過的AsyncTask內部存儲,並且如果的onStop方法告訴該應用去loginscreen,那麼如果用戶在上載過程停止活動,那麼大量的數據的應用程序跟蹤在過程中可能會引發變形。 –

+0

我不認爲你需要onStop()來實現你的目標。我認爲你只需要重寫onResume()和onRestart()。 – iTurki

回答

1

你需要的是把重點放在兩個電話你的內容的活動:

  • onPause()這是你殺的內容活動,從堆棧中刪除。您可以輕鬆地做到這一點:

    @Override 
    public void onPause() { 
        super.onPause(); 
        //Save your data here 
    
        finish(); //Kill Contect Activity. 
    } 
    
  • onRestart()這是你將用戶重定向到的主要活動。

    @Override 
    public void onRestart() { 
        super.onRestart(); 
        Intent i = new Intent(this, MainActivity.class); 
        startActivity(i); 
        finish(); //Kill Contect Activity. 
    } 
    

This graph可以幫助您瞭解活動的生命週期:

enter image description here

+0

我實現這些修改的內容活動的活動(延伸ActionBarActivity),其結果是,當我登錄屏幕試圖在成功登錄嘗試,我假設的onResume()開始內容的活動就叫做從而使登錄活動從一開始就沒有實際進入內容活動。 –

+0

@ZacharyWathen你是對的!我沒有注意到這一點。好的,現在嘗試將'onResume()'的代碼移動到'onRestart()'。我認爲它應該起作用。我編輯了答案。 – iTurki

+0

出於某種原因,onRestart並不總是用這個應用程序調用。有幾種情況下,我登錄後,點擊主頁按鈕,然後回到應用程序,只是爲了恢復我離開的地方,而不是應用程序需要登錄屏幕。我所做的是添加一個布爾變量,只有在內容活動加載後才設置爲true。 (在調用onResume之後)調用isLoaded。在onResume中,如果isLoaded = true(它不是在設置活動之前調用onResume時),我將它設置爲僅啓動loginActivity。 –

0

你需要的是設置標誌android:clearTaskOnLaunchandroid:excludeFromRecents在清單的活動。

+0

我已經將android:excludeFromRecents添加到了我的活動中,並且我回去並將android:clearTaskOnLaunch添加到了我的活動中,結果沒有顯示我的應用程序的數據,而是使用「hello world」的空白活動。然後我在應用程序標籤中嘗試了它,但仍然沒有運氣。如果我無法獲得上述解決方案,我將更深入地探討這個解決方案。謝謝! –

相關問題