防止应用程序启动Android上的代码执行

时间:2013-09-23 20:30:14

标签: java 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滞后。有什么方法可以阻止它吗?谢谢!

2 个答案:

答案 0 :(得分:0)

尝试使用计时器对象。

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

答案 1 :(得分:0)

您可以使用简单的布尔值

来防止它执行
private boolean imAwake = false;

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

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

然后在boolean为true之前阻止代码运行:

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

编辑:

刚看到你对威廉回答的评论。据我所知,当应用程序是startet时,它会在没有任何交互的情况下调用OnCheckedChangeListener。这是不受欢迎的行为,对吧?

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