私が開発しているアプリケーションには、ループで実行されているスレッドがあります。ループ内では、いくつかの条件が評価され、これらの条件に応じて、値または別の値が SharedPreferences に格納されます。
public void run()
{
try
{
SharedPreferences preferences =
context.getSharedPreferences("MyPrefs", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
while (true)
{
if (condition1)
{
editor.putBoolean("mykey", "1");
}
else if (condition 2)
{
editor.putBoolean("mykey", "2");
}
editor.commit();
if (isInterrupted())
throw new InterruptedException();
Thread.sleep(60000); // 60 seconds
}
}
catch (InterruptedException e)
{
Thread.currentThread().interrupt();
}
}
このスレッドは、onResume メソッドの Activity によって開始され、onPause メソッドで中断されます。
スレッドがスリープ中にアクティビティ (メイン スレッド) によって中断されると、InterruptedException がスローされます。それは大丈夫です。
しかし、私の問題は、アクティビティ(メインスレッド)が実行中(およびスリープしていない)にスレッドを中断する場合です。「中断フラグ」はtrueに設定されていますが、エディターでcommitを呼び出した後、フラグがfalseに設定されているため、InterruptedExceptionをスローするスレッドを中断できません。
私に何ができる?
ありがとう