Ich habe eine Android-Anwendung. Ich mache einen Ladebildschirm mit einem Fortschrittsbalken.
Ich habe eine Verzögerung in der onCreate-Methode eingegeben. Wenn der Timer abgelaufen ist, möchte ich die aktuelle Aktivität beenden und eine neue starten.
Es gibt mir nur eine Ausnahme, wenn es die finish()
Methode aufruft .
public class LoadingScreen extends Activity{
private LoadingScreen loadingScreen;
Intent i = new Intent(this, HomeScreen.class);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loading);
CountDownTimer timer = new CountDownTimer(10000, 1000) //10 second Timer
{
public void onTick(long l)
{
}
@Override
public void onFinish()
{
loadingScreen.finishActivity(0);
startActivity(i);
};
}.start();
}
}
Wie kann ich den Code so ändern, dass er endet, wenn der Fortschrittsbalken fertig ist?
quelle
noHistory
ist nicht dasselbe wiefinish()
Ich habe versucht, dieses Beispiel zu verwenden, aber es ist kläglich gescheitert. Jedes Mal, wenn ich finish () / finishactivity () in einem Handler aufrufe, ist dies bedrohlich
java.lang.IllegalAccess Exception
. Ich bin mir nicht sicher, wie es für denjenigen funktioniert hat, der die Frage gestellt hat.Stattdessen habe ich eine Lösung gefunden, die eine Methode in Ihrer Aktivität erstellt, z
void kill_activity() { finish(); }
Rufen Sie diese Methode innerhalb der Ausführungsmethode des Handlers auf. Das hat für mich wie ein Zauber gewirkt. Hoffe, dies hilft jedem, der Probleme damit hat, "eine Aktivität aus einem anderen Thread zu schließen?".
quelle
Sie müssen
finish()
vom UI-Thread aus aufrufen , nicht von einem Hintergrund-Thread. Die Möglichkeit dazu besteht darin, einen Handler zu deklarieren und den Handler aufzufordern, eine ausführbare Datei auf dem UI-Thread auszuführen. Zum Beispiel:public class LoadingScreen extends Activity{ private LoadingScreen loadingScreen; Intent i = new Intent(this, HomeScreen.class); Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); setContentView(R.layout.loading); CountDownTimer timer = new CountDownTimer(10000, 1000) //10seceonds Timer { @Override public void onTick(long l) { } @Override public void onFinish() { handler.post(new Runnable() { public void run() { loadingScreen.finishActivity(0); startActivity(i); } }); }; }.start(); } }
quelle
Activity
Methoden - wieActivity.runOnUiThread(Runnable)
- nicht unter diese Einschränkung. Ich stimme Ihnen zu, dass die Dokumente nicht so klar sind, wie sie zu diesem Thema sein müssen.)Wenn Sie eine neue Aktivität starten und die aktuelle Aktivität beenden möchten, können Sie Folgendes tun:
API 11 oder höher
Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
API 10 oder niedriger
Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(IntentCompat.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);
Ich hoffe das kann jemandem helfen =)
quelle
Rufen Sie einfach die
finish()
Methode auf:context.finish();
quelle
Sie können auch Folgendes verwenden: finishAffinity ()
quelle
Ich habe viele Antworten gefunden, aber keine ist einfach ... Ich hoffe, das wird dir helfen ...
try{ Intent intent = new Intent(CurrentActivity.this, NewActivity.class); startActivity(intent); } finally { finish(); }
Daher ist hier eine sehr einfache Logik zu finden, da wir wissen, dass wir in Java Code schreiben, der einige Ausnahmewahrscheinlichkeiten in einem try-Block aufweist, und diese Ausnahme im catch-Block behandeln, aber im letzten Block Code schreiben, der um jeden Preis ausgeführt werden muss ( Entweder kommt die Ausnahme oder nicht).
quelle
Ich habe eine neue Aktivität gestartet und dann die aktuelle Aktivität geschlossen. Denken Sie also an diese einfache Regel:
finish() startActivity<...>()
und nicht
startActivity<...>() finish()
quelle