这是我的代码:
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 :(得分: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,还要检查值是否为第一次设置(首次启动应用程序),如果设置为先前保存的值。这两个实例都是您不希望执行任何代码的。