我的一个班级有两个处理程序,可以定期发送消息。此类在其中一个活动中实例化。以下是代码:
public class MyClass {
private Boolean started = false;
private Handler handler1 = new Handler();
private Handler handler2 = new Handler();
private Runnable runnable1 = new Runnable() {
@Override
public void run() {
sendMessage("blah");
}
};
private Runnable runnable2 = new Runnable() {
@Override
public void run() {
sendMessage("blah blah");
if (started) {
triggerMessageSending();
}
}
};
}
public void startMessageSending(){
triggerMessageSending();
}
private void triggerMessageSending(){
started = true;
handler1.postDelayed(runnable1, 500);
handler2.postDelayed(runnable2, 1000);
}
public void stopMessageSending(){
started = false;
handler1.removeCallbacks(runnable1);
handler2.removeCallbacks(runnable2);
}
}
这是我的活动:
public class MyActivity extends Activity {
private MyClass myClass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myClass = new MyClass();
myClass.startMessageSending();
}
@Override
protected void onStop() {
super.onStop();
myClass.stopMessageSending();
}
}
第一次一切正常。如果我按下后退按钮并转到上一个活动并再次返回(不退出应用程序),则会调用sendMessage方法两次。如果我再做一次,这就变成了三个。在不退出应用程序的情况下,它会在我开始此活动时多次调用该方法。如果我退出应用程序并再次执行此操作,它第一次正常工作。
这是什么原因?我哪里错了?
答案 0 :(得分:0)
不确定您的业务逻辑,但这些是我在您的代码中可以看到的问题。
Runnable
正在执行相同的工作(sendMessage
),那么有两个runnables有什么意义? Runnable
runnable2中,同样完成了同样的事情。唯一的区别是boolean started
检查哪个触发triggerMessageSending()
进行循环现在MyClass对象启动在onCreate
中使用triggerMessageSending()
方法完成,该方法启动两个处理程序然后运行
注意:
onStop()
在活动生命周期中可能会或可能不会被调用。检查此link 。一世 意味着它不能保证。执行myClass.stopMessageSending();
onPause()
并检查
所以你的消息被调用了两次。