0

这是我的代码:

 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);
                  }
            }
          });

我的问题是里面的命令是在应用程序启动的第一秒内执行的。这会导致严重滞后。有什么办法可以防止它吗?谢谢!

4

2 回答 2

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。那是不受欢迎的行为,对吗?

我相信在创建您的应用程序时会调用 OnCheckedChangeListener 来设置当前值,所以我认为您需要做的是保存最后一个值,这样您不仅可以检查真/假,还可以检查该值是否设置为第一次(应用程序的第一次启动)以及是否设置为先前保存的值。您不希望执行任何代码的两个实例。

于 2013-09-23T20:40:49.597 回答
0

尝试使用计时器对象。

Timer mTimer = new Timer();
mTimer.schedule(new TimerTask()
{
    @Override
    public void run()
    {
        // Your code goes here
    }
}, 1000); // 1sec
于 2013-09-23T20:36:08.967 回答