2013-03-17 96 views
0

命令執行在Android應用我想開發應用程序,在通過接收機onReceive()方法內的兩個功能啓動運行命令運行一些shell命令,但我有兩個問題:的Android殼牌在啓動

  1. 第一個函數執行三個分開的命令,其中三個調用爲executeCommand(),但由於在我的代碼executeCommand()中包含Process.waitFor()函數,接收器中的某些內容超時並且並不總是執行所有命令。
  2. 第二個函數命令應該在執行前三個shell命令後執行並返回一個結果,而這種情況不會發生。如果我刪除Process.waitFor()所有的命令都會執行,但由於第一個命令還沒有返回結果,所以它們的行爲是錯誤的。

有沒有辦法延長等待時間?只運行一個連續的命令而不是三個分開的命令會減少Process.waitFor()的總時間?

+1

該文檔明確指出,您應該*不*在onReceive調用的主線程上執行長時間運行的命令。您應該創建一個'IntentService'來處理shell命令並按順序執行它們。看到這裏:http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive(android.content.Context,android.content.Intent) – 323go 2013-03-18 01:30:45

+0

這解決了我的問題,如果你會做出答案我很樂意接受它。謝謝,我錯過了這些路線。 – Vektor88 2013-03-18 02:42:17

+0

很高興我能幫到你。我擴大了一點;它可以在未來幫助其他人。 – 323go 2013-03-18 02:47:45

回答

2

BroadcastReceiver documentation特別建議不要在onReceive()調用的主線程上執行長時間運行的命令。更好的解決方案是創建一個IntentService來處理shell命令並按順序執行它們。這不會阻止BroadcastReceiver,甚至應該提高啓動速度。