Я попытался переопределить onBackPressed, чтобы не только завершить текущую деятельность, но и прервать поток, поскольку я вызываю намерение для следующего действия внутри. Когда я снова нажал, активность всплеска закончилась, но поток продолжал работать и вызывать намерение следующего действия. Теперь, когда я включаю прерывание потока в BackPressed, приложение падает, когда я нажимаю. Что я делаю не так?Как прервать поток 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();
}
}
вы попробуйте простую проверку нулевой в 'homeintent()', то 'если (splash.this! = NULL)'? – Droidekas
Какое исключение вы получаете? можете ли вы опубликовать свой стек? –
Ссылка 'spashthread' является локальной для onClickListener. Вам нужно назначить его глобальной ссылке и поместить проверку nullpointer, как сказал @Droidekas. – DeeV