2014-03-28 66 views
1

我正在編寫一個應用程序並在內部存儲器中使用一些臨時文件,例如(/myapp/files/tmp/*什麼時候應該清理應用程序的臨時文件?

這些文件是臨時文件,在應用程序退出時被視爲過期。 清理這些文件有哪些好的做法?

Application類中沒有onDestroy()。活動之間的交換意味着知道何時活動的onDestroy正在退出活動或應用程序並不是微不足道的。而且,例如,當應用程序崩潰時,這些都不會被調用。他們不保證被調用。

因此,我在應用程序類的實例(在onCreate啓動的AsyncTask中)清除onCreate中的那些文件。

但對我來說似乎有點古怪。啓動該應用程序將啓動一個線程,以刪除以前使用中不必要的文件。有一個更好的方法嗎?

file.deleteOnExit()也鼓勵在Android

+0

您可以覆蓋Application類的onTerminate()。 –

+0

@BirajZalavadia onTerminate()看起來像是一個非常非常糟糕的主意: 「這種方法適用於模擬的流程環境,它永遠不會在生產型Android設備上調用,只需簡單地刪除它們即可刪除進程;不需要用戶代碼(包括這個回調函數)在執行時會被執行。「 – George

+0

所以當你想刪除你的臨時文件?當應用程序去背景? –

回答

0

您可以通過使用活動的生命週期實現這一目標。

按照步驟操作。

1)創建BaseActivity.java,它擴展了Activity或FragmentActivity。

2)所有其他活動將擴展BaseActivity。 3)現在你需要重寫兩種方法,說:

onResume();

onPause();

4)你的基本活動是怎樣的。

public abstract class BaseActivity extends Activity { 

    public static int actictyCounter=0; 


    @Override 
    protected void onResume() { 
     super.onResume(); 
     actictyCounter++; 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     actictyCounter--; 

     // This was the last activity 
     if(actictyCounter==0){ 
      //code to remove your temp files 
     } 
    } 

} 
+0

這是一種可怕的方式來跟蹤我的應用程序是否正在運行。靜態可變數據計數所有活動?我沒有辦法在這麼做。我不打算爲您的答案投票,因爲這可以通過這種方式完成,而且您已經付出了一些努力來展示它,但我不會接受這個答案。 – George

+0

確定花花公子不是一個問題,只要你找到更好的解決方案,而不是更新我的答案。 –

相關問題