Я попытался переопределить onBackPressed, чтобы не только завершить текущее действие, но и прервать поток, поскольку я вызываю намерение для следующего действия внутри. Когда я нажимал назад раньше, активность всплеска заканчивалась, но поток продолжал работать и вызывал намерение для следующей активности. Теперь, когда я включил прерывание потока в BackPressed, приложение вылетает, когда я нажимаю назад. Что я делаю неправильно?
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();
}
}