私のクラスには、一定の間隔でメッセージを送信するハンドラが2つあります。このクラスは、いずれかのアクティビティでインスタンス化されます。ここで複数回実行するハンドラ実行可能ファイル
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メソッドが2回呼び出されます。私がもう一度やるなら、これは3になります。アプリを終了せずにこのアクティビティを何度も呼び出すと、メソッドが呼び出されます。私は、アプリケーションを終了し、これをもう一度行う場合、初めて正常に動作します。
この理由は何ですか?どこが間違っていますか?
私はよく分かりませんが、 'onStop()'メソッドで 'myClass = null;'を設定してみてください。 –
試してみました – NewOne
'static' myClassオブジェクトを試してみてください。 –