2011-04-11 47 views
1

在我的主要活動中,在onStop下,我設置了myVar = true。在onResume中,我檢查myVar是否爲true並執行某些操作。onStop沒有被調用...主頁按鈕按下

如果您在我的主要活動中點擊主頁按鈕並從主屏幕/應用程序抽屜再次啓動它,它可以正常工作。

如果您在不同的活動中點擊主頁按鈕並從主屏幕/應用程序抽屜重新啓動主頁按鈕,它會顯示主要活動,因爲我在主要活動和android:finishOnTaskLaunch上設置了clearTaskOnLaunch =「true」 =「true」設置在我的其他活動上。但是,當主按鈕被按下時,它在主要活動中看起來並沒有打到onStop。

我開始結果的其他活動。如果結果代碼= result_ok或result_canceled,我設置myVar = false。但是...如果home按鈕被按下,它不應該設置結果並執行onActivityResult。

任何想法如何解決這個問題?

編輯:

above onCreate.. I set startNew = true; 
@Override 
    public void onStop() { 
     super.onStop(); 
     startNew = true; 
    } 

    @Override 
    public void onRestart() { 
     super.onRestart(); 
     if (startNew) { 
      getCurrentDate(0); 
      updateDisplay(); 
      fillData(); 
     } 
    } 

其他唯一的參考startNew,是我的onActivityResult方法,如果這是從我的主要活動推出的活動返回要麼RESULT_OK或RESULT_CANCELED,我設置startNew =假。

我試圖確保每次我的應用程序從主屏幕/應用程序抽屜啓動時,它都會運行這3種方法。

回答

3

轉到onPause(),因爲根據文檔,onStop()在某些情況下不會被調用。

+0

我改變它是安全的,但我從來沒有注意到兩者之間的區別,我用它的東西。 – Roger 2011-04-11 18:21:25

+2

根據文檔,onStop()不保證被調用,但onPause()是。從Honeycomb開始,這改變了... onStop()現在將被保證被調用,但是如果你想支持運行早期版本的設備,你需要相應的編碼:http://developer.android.com/reference/android/app /Activity.html – BonanzaDriver 2011-04-11 20:44:25

+2

每*什麼*文檔? – 2014-08-12 22:46:59

1

你想在onStop上做什麼?通常你想在onPause方法中做到這一點。在生命週期中越接近onDestroy,在您的Activity被銷燬以恢復內存之前,該方法被調用的可能性就越小。

+0

我已添加更多詳情。我在做的事似乎也一樣,onStop,onPause。 – Roger 2011-04-11 18:09:44

+0

由於活動的無狀態性質,這在Android中很難實現。您故意不知道活動發佈的來源。因此,我所看到的最好的方法是對應用程序進行子類化,在那裏放置標誌,並更新子活動完成方法中的標誌。這樣,如果從托盤啓動,則不存在子活動,因此標誌保持其原始狀態。如果子活動結束,則設置標誌,並且您知道您不需要重新使用您的方法。希望這是有道理的。 – James 2011-04-11 18:16:37

+0

我不一定需要知道它從何處啓動。我只需要確保每當主要活動進入視圖時都會觸發這3種方法,除非由於我爲結果,setResult和結束而開始的活動而進入視圖。唯一一次不起作用的是在不在主要活動中的情況下按下主頁按鈕。 – Roger 2011-04-11 18:24:09