我正在制作的应用程序要求在特定变量的值从0变为1时执行一些代码。
下面的处理程序示例是我目前用来执行此操作的方法(我是从其他人复制的)
我觉得这不是一个合适的方法,因为在我的应用程序中只有三个这样的处理程序会导致UI相当无响应,并导致设备(电话)变得很热。
正如你所看到的,我已经在处理程序中加入了10ms的延迟来试图解决这个问题
是否有更像 OnClickListener 的东西可以随时监听变量值变化而不会对CPU施加这样的压力?
我是Java和Android的新手,所以非常感谢一个简单的例子。
final Handler myHandler1 = new Handler();
new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(10);
myHandler1.post(new Runnable()
{
@Override
public void run()
{
if (myVariable == 1)
{
myVariable = 0;
//do stuff
}
}
});
} catch (Exception e) {}
}
}
}).start();
答案 0 :(得分:1)
您必须通过setter方法设置变量。然后,你可以对这种变化做出反应。
public void setMyVariable(int value) {
this.myVariable = value;
if (myVariable == 1) {
doSomethingWhen1();
} else if (myVariable == 0) {
doSomethingWhen0();
}
}
更优雅的方法是观察者模式,Here你可以找到更详细的文档。
您必须在移动设备上避免while(true)
循环,它会耗尽您的电池并且您也会阻止UI线程。这就是为什么你的用户界面没有响应而你的手机很热的原因。