2014-07-16 146 views
1

我的Android應用程序具有2個活動:的Android - 刷新活動

在第一個(MainActivity),用戶選擇某些參數,而這些參數被髮送到第二活動(顯示)。 第二個活動調用Web服務,並根據所選參數,Web服務返回一個值。我使用返回的值來繪製該值的演變的條形圖。這就是爲什麼我創造了第二個活動的定時器,我把在OnCreate()函數:

Timer t = new Timer(); 
t.scheduleAtFixedRate(new TimerTask() { 
    public void run() { 
     finish(); 
     startActivity(getIntent()); 
    } 
},10000, 10000); 

每10秒鐘,就這樣,第二個活動是又一次打來電話,條形圖與新的返回值進行更新。

問題是,在計時器的第2次或第3次執行後,同時返回幾個相同的值,就好像活動被多次調用一樣。然後應用程序開始凍結(但不關閉)。

我使用這個庫提供的圖表:http://android-graphview.org/
我還用提供的上述網站(resetData和appendData)的功能嘗試,也是無效()函數,但沒有任何工程。
任何想法,爲什麼會發生這種情況?我的方式刷新活動是否錯誤?

+0

爲什麼不刷新圖表而不是活動? – Marius

+0

我需要再次調用Web服務才能獲得新值(以便我可以更新圖表)。 – user3774435

+0

然後調用Web服務,然後更新圖表。仍然看不到爲什麼你需要重新開始你的活動。請參閱[這裏](http://developer.android.com/reference/android/app/Activity.html)找出活動的正確用法。 – Marius

回答

0

你描述它的方式:

  1. 你的第二個活動
  2. 每個定時器的目的是調用次活動的每個調用創建一個新的定時器(見2)(見1 。)每隔10秒

因此,作爲時間函數調用第二個活動的次數以指數方式增加。

一個可能的解決方案是將定時器移動到主活動的onCreate方法(並且仍然調用它的第二個活動)。 這樣,任何時候都應該有一個激活的定時器。

編輯: 正如Marius所評論的,一個Activity可能不是最佳選擇。如果沒有用戶輸入,並且活動所做的唯一事情就是調用Web服務並返回結果,則從主活動調用的方法就足夠了。

+0

工程就像一個魅力,感謝一百萬! – user3774435

0

首先,撥打finish()並開始活動,不是好想法。其次,就我所瞭解的情況而言,每隔10秒後在Timer內調用AsyncTask是更好的方法。在doInBackground()中撥打您的網絡服務,然後從onPostExecute()更新您的用戶界面,這樣您就可以避免撥打finish()並每隔10秒重新啓動您的活動。

最後,您正在創建一個新的Timer實例eveytime,您的Activity被調用,因此創建掛起您的應用程序的大量Timer實例。