onBackPressed をオーバーライドして、現在のアクティビティを終了するだけでなく、次のアクティビティへのインテントを呼び出しているときにスレッドを中断しようとしました。前に押し返したら、スプラッシュ アクティビティは終了しましたが、スレッドは実行され続け、インテントを次のアクティビティに呼び出しました。スレッドの中断 onBackPressed を含めたので、戻るボタンを押すとアプリがクラッシュします。私は何を間違っていますか?
skipscreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences savestate = getSharedPreferences("skip", MODE_PRIVATE);
savestate.edit().putBoolean("skip", true).apply();
skip= true;
homeintent();
}
});
Thread splashthread = new Thread() {
@Override
public void run() {
try {
sleep(3000);
if (!skip) { homeintent();}
} catch (InterruptedException Interrupt) {
Interrupt.printStackTrace();
}
}
};
splashthread.start();
}
private void homeintent() {
Intent i = new Intent(splash.this, home.class);
startActivity(i);
finish();
}
@Override
public void onBackPressed() {
splashthread.interrupt();
finish();
}
}
更新: (このソリューションは私にとってはうまくいきました)。
skipscreen.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SharedPreferences savestate = getSharedPreferences("skip", MODE_PRIVATE);
savestate.edit().putBoolean("skip", true).apply();
skip= true;
homeintent();
}
});
Thread splashthread = new Thread() {
@Override
public void run() {
try {
sleep(3000);
if (!skip) { homeintent();}
} catch (InterruptedException Interrupt) {
Interrupt.printStackTrace();
}
}
};
splashthread.start();
}
private void homeintent() {
if (!ThreadInterrupted) {
Intent i = new Intent(splash.this, home.class);
startActivity(i);
}
finish();
}
@Override
public void onBackPressed() {
SharedPreferences savestate= getSharedPreferences("ThreadInterrupted", MODE_PRIVATE);
savestate.edit().putBoolean("ThreadInterrupted", true).apply();
ThreadInterrupted = true;
homeintent();
}
}