2014-01-14 41 views
0

我是android新手。我的問題與我的應用程序一起工作。我有一些變量需要跟蹤我的應用中的各種活動。所以我在擴展android.app.Application的類中聲明瞭它們。事實上,我認爲這些變量只有在應用程序還活着時纔會存在。如果我們關閉應用程序,認爲他們不會活着。安卓使用android.app.Application中聲明的變量時遇到問題

對於例如:我有一些變量「n」,我已經在全局上下文中使用擴展android.app.Application的類進行了聲明。所以我做了一些活動,最後當應用程序即將完成並退出時,n遞增爲7.所以下一次,當我嘗試新運行應用程序時,我看到n仍然保持值7但不是0(在應用程序類中的變量聲明期間,我將它初始化爲0),並且它增量爲8,9 ...但不是1,2(我期望發生)..爲什麼它在應用程序之後仍然保留值完成並退出?我錯了關於android.app.Application類?..所以我希望我的應用程序只保留跟蹤變量,直到應用程序被執行。如果應用程序完成,並且它再次運行時,我想重新初始化它(像n再次初始化爲0)...我該怎麼做?

+1

因爲該應用程序正在關閉並不意味着它已退出。 – njzk2

+0

你如何關閉應用程序? –

+0

@Seraphim我在所有的活動中都完成了()...我認爲沒有更多的活動留在堆棧上,應用程序會被釋放所有的資源.. – user2784307

回答

1

在Android平臺上(以及類似的iOS),當您按回(或主頁)按鈕時,您的應用程序不會退出。你的應用程序只是被帶到了後臺,這就是爲什麼你的應用程序仍然存在,因此保存你之前設置的變量。這取決於Android操作系統決定你的應用程序何時被殺死 - 而且通常當操作系統需要清除一些系統資源(通常是內存)時。

你應該考慮到這一點來設計你的應用程序。

因此,回到你的情況 - 首先你應該檢查約Activity lifecycle。有像onPause或onStop這樣的生命週期方法,您可以隨意重寫和重置應用程序狀態。

+0

我認爲完成()在所有的活動將服務於目的..沒有更多的活動堆棧..應用程序將被殺死..所以我錯了..謝謝.. – user2784307

+0

是啊..我讀到他們..一路以後我會再看看它.. – user2784307

0

正如告訴bt smitalm「你的應用程序沒有退出時,你回來」。要關閉應用程序(和其終止)第一卸載所有acitvities,然後執行:

System.exit(0); 
+0

「卸載」是指完成所有活動?然後wtiting System.exit(0).. r8? – user2784307

+0

是的,在每個活動上調用finish()並取消註冊接收器... –

+0

System.exit(0)確實退出應用程序,但它很冒險,因爲它繞過了標準做法。它在某些場景中可能很有用,但大多數情況下最好避免並正確使用Activity生命週期方法。 – hendrix

0

至於說上面你可以調用finish()方法對每個活動onBackPressed()方法。 覆蓋onBackPressed()在每個活動。

@Override 
public void onBackPressed() 
{ 
     finish(); 
}