2011-10-24 16 views
4

我正在一個android應用程序,我的應用程序打開手機上的一些硬件。 如果有人殺了我的應用程序,我想關閉硬件。 如何在應用程序退出前「捕捉」kill命令/事件/信號並進行清理?android:如何清理應用程序時它被殺


一些更新我發現。 您無法保護您的應用程序免於在所有情況下被殺害。 onDestroy()不保證被調用(例如在OOM殺手級的情況下,或者用戶調用killall -9 xxx)。 最好你可以做的是實現onDestroy()函數,爲sig_term添加處理程序,並註冊您的應用程序超出了OOM殺手的範圍。

這應該處理90%的情況。 所有其他案例都來自特定的用戶活動 - 所以他會得到我們想要的,我猜...

+0

我正在尋找不像onStop和onDestroy那樣不能保證運行的東西。就像在Linux應用程序中捕獲TERM信號 –

+0

也許你可以通過創建一個使用自己的進程並定期檢查主進程的服務來繞過它。 – fadisdh

回答

0

把你的清理代碼放在onDestroy()方法中,這是在活動最終關閉之前調用的最後一個方法。對於在Android活動的生命週期的所有信息來源對執行代碼的主要活動看看Android lifecycle

6

覆蓋的onDestroy()當你的應用程序被摧毀,或的onStop()執行代碼時用戶退出您的應用程序。

onDestroy():在活動被破壞之前調用。這是活動將收到的最終電話。它可以被稱爲是因爲活動正在完成(有人稱之爲finish()),或者因爲系統暫時銷燬活動的這個實例以節省空間。你可以用isFinishing()方法來區分這兩種情況。

onStop():當活動對用戶不再可見時調用。這可能是因爲它正在被銷燬,或者是因爲另一個活動(現有的或新的活動)已被恢復並覆蓋它。如果活動回來與用戶交互,則由onRestart()跟隨,或者通過onDestroy()如果​​這個活動消失了。

public class ExampleActivity extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // The activity is being created. 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    // The activity is no longer visible (it is now "stopped") 
} 
@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    // The activity is about to be destroyed. 
} } 

我強烈建議你閱讀Activities

+2

onStop和onDestroy的問題在於,如果從外部殺死進程(例如使用kill),則不會調用該進程。我在onDestroy中有代碼,但在某些情況下,它沒有被調用。我很想知道是否有人正在強制殺死應用程序(使用殺人或任務殺手) –

1

的onPause()方法來之前在活動生命週期的onStop()方法。您的應用程序可能在暫停或停止時被android殺死,您可能需要在onPause中添加isFinishing()方法進行清理。您不必在停止時執行此操作,因爲暫停會在停止之前進行初始化。如果你在暫停時被殺,onStop()不保證執行。

@Override 
protected void onPause() { 
    super.onPause(); 
    //pause actions 
    if (isFinishing()) { 
     //checks to see if activity is finishing 
     //type your code to execute clean up here 
    } 
} 

看到isFinishing()爲更詳細地: developer.android.com/reference/android/app/Activity.html#isFinishing()

2

我怎樣才能 「捕獲」 kill命令/事件/信號,並在應用程序退出之前進行清理?

你不行。

如果硬件正在被某個活動使用,請將其釋放到onPause()

如果硬件正在被多個活動使用,則需要通過一些具有引用計數的迴轉來安排在最後一個活動暫停時釋放它。

如果硬件正在被別的東西使用,你有問題。

+0

然後我想我有一個問題:( –

相關問題