2013-09-23 49 views
0

這是我的代碼:避免在代碼執行上aplication啓動Android

bfqs.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      public void onCheckedChanged(CompoundButton buttonView, 
        boolean isChecked) { 
        if(isChecked==true){ 
         String[] command = {"su", "-c", "echo \"" + "1" + "\" > " + FILE}; 
         ShellCommand.run(command); 
        } 
        else{ 
         String[] command = {"su", "-c", "echo \"" + "0" + "\" > " + FILE}; 
        ShellCommand.run(command); 
        } 
      } 
      }); 

我的問題是應用程序啓動時的第一個秒執行的命令裏。這導致majour滯後。有什麼辦法可以阻止它嗎?謝謝!

回答

0

你可以從一個簡單的布爾

private boolean imAwake = false; 

@Overwrite 
protected void onCreate(Bundle savedInstanceState) { 
    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      imAwake = true; 
     } 
    }, 3000); 
} 

執行保存它,然後防止代碼的布爾之前運行的是真實的:

bfqs.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
       if (imAwake) { 
        if(isChecked==true){ 
         String[] command = {"su", "-c", "echo \"" + "1" + "\" > " + FILE}; 
         ShellCommand.run(command); 
        } 
        else{ 
         String[] command = {"su", "-c", "echo \"" + "0" + "\" > " + FILE}; 
        ShellCommand.run(command); 
        } 
       } 
     } 
     }); 

編輯:

剛剛看到你對威廉回答的評論。據我所知,OnCheckedChangeListener然後調用時沒有任何交互,當應用程序是startet。那是不受歡迎的行爲,對吧?我相信OnCheckedChangeListener是在創建你的應用程序來調用當前值時調用的,所以我認爲你需要做的就是保存最後一個值,這樣你不僅可以檢查true/false,還可以檢查值是第一次設置(應用程序的第一次啓動),並且它是否設置爲先前保存的值。兩種情況下,你不想要執行任何代碼。

0

嘗試使用計時器對象。

Timer mTimer = new Timer(); 
mTimer.schedule(new TimerTask() 
{ 
    @Override 
    public void run() 
    { 
     // Your code goes here 
    } 
}, 1000); // 1sec 
+0

我想阻止它執行,而不是延遲它。它只需要執行代碼時,我檢查它,而不是我啓動應用程序。 – AlphaVladim