Was ist dieser Fehler und warum passiert er?
05-17 18:24:57.069: ERROR/WindowManager(18850): Activity com.mypkg.myP has leaked window [email protected] that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850): Android.view.WindowLeaked: Activity ccom.mypkg.myP has leaked window [email protected] that was originally added here
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.view.ViewRoot.<init>(ViewRoot.Java:231)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:148)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:91)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.view.Window$LocalWindowManager.addView(Window.Java:424)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.Dialog.show(Dialog.Java:239)
05-17 18:24:57.069: ERROR/WindowManager(18850): at com.mypkg.myP$PreparePairingLinkageData.onPreExecute(viewP.Java:183)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.os.AsyncTask.execute(AsyncTask.Java:391)
05-17 18:24:57.069: ERROR/WindowManager(18850): at com.mypkg.myP.onCreate(viewP.Java:94)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2544)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2621)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.ActivityThread.access$2200(ActivityThread.Java:126)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1932)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.os.Handler.dispatchMessage(Handler.Java:99)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.os.Looper.loop(Looper.Java:123)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Android.app.ActivityThread.main(ActivityThread.Java:4595)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Java.lang.reflect.Method.invokeNative(Native Method)
05-17 18:24:57.069: ERROR/WindowManager(18850): at Java.lang.reflect.Method.invoke(Method.Java:521)
05-17 18:24:57.069: ERROR/WindowManager(18850): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:860)
05-17 18:24:57.069: ERROR/WindowManager(18850): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:618)
05-17 18:24:57.069: ERROR/WindowManager(18850): at dalvik.system.NativeStart.main(Native Method)
Sie versuchen, einen Dialog anzuzeigen, nachdem Sie eine Aktivität beendet haben.
[BEARBEITEN]
Diese Frage ist eine der besten Suchen auf Google für Android-Entwickler.... Daher einige wichtige Punkte aus Kommentaren hinzufügen, die für zukünftige Ermittler hilfreich sein könnten, ohne sich eingehend mit den Kommentaren zu beschäftigen.
Antwort 1 :
Sie versuchen, einen Dialog anzuzeigen, nachdem Sie eine Aktivität beendet haben.
Antwort 2
Dieser Fehler kann unter Umständen ein wenig irreführend sein (obwohl die Antwort immer noch völlig genau ist) - d. H. In meinem Fall ein Eine nicht behandelte Ausnahme wurde in eine AsyncTask geworfen, wodurch die .__ verursacht wurde. Aktivität zum Herunterfahren, dann verursachte ein geöffneter Fortschrittsdialog dies Ausnahme ... also die "echte" Ausnahme war etwas früher im Protokoll
Antwort 3
Rufen Sie in der Dialoginstanz, die Sie erstellt haben, vor dem Beenden Ihres .__-Befehls "deve ()" auf. Aktivität, z. in onPause () oder onDestroy ()
Die Lösung besteht darin, dismiss()
für das Dialog
aufzurufen, das Sie in viewP.Java:183
erstellt haben, bevor Sie das Activity
verlassen, z. in onPause()
. Alle Window
s & Dialog
s sollten vor dem Verlassen eines Activity
geschlossen werden.
Wenn Sie AsyncTask
verwenden, kann diese Protokollnachricht möglicherweise trügerisch sein. Wenn Sie in Ihrem Protokoll nachschlagen, finden Sie möglicherweise einen anderen Fehler, wahrscheinlich einen in Ihrer doInBackground()
-Methode Ihrer AsyncTask
, der Ihre aktuelle Activity
in die Luft sprengt, und sobald die AsyncTask
zurückkommt, kennen Sie den Rest. Einige andere Benutzer haben das hier schon erklärt :-)
Ich habe diesen Fehler ausgelöst, indem ich versehentlich hide()
anstelle von dismiss()
für eine AlertDialog
aufgerufen habe.
Sie können diese Ausnahme durch einen einfachen/dummen Fehler erhalten, indem Sie (beispielsweise) versehentlich finish()
aufrufen, nachdem Sie eine AlertDialog
angezeigt haben, wenn Sie eine break call -Anweisung in einer switch-Anweisung verpassen ...
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.new_button:
openMyAlertDialog();
break; <-- If you forget this the finish() method below
will be called while the dialog is showing!
case R.id.exit_button:
finish();
break;
}
}
Die finish()
-Methode schließt die Activity
, aber die AlertDialog
wird immer noch angezeigt!
Wenn Sie also intensiv den Code anstarren, nach Problemen mit dem Threading oder nach komplexer Codierung suchen, sollten Sie den Wald für die Bäume nicht aus den Augen verlieren. Manchmal kann es nur so einfach und dumm sein wie eine fehlende break-Anweisung. :)
Die Antworten auf diese Frage waren alle richtig, aber ein wenig verwirrend für mich zu verstehen, warum. Nachdem ich ungefähr 2 Stunden herumgespielt hatte, traf mich der Grund für diesen Fehler (in meinem Fall):
Sie wissen bereits aus dem Lesen anderer Antworten, dass das X has leaked window [email protected][]
error bedeutet, dass ein Dialogfeld geöffnet war, als Ihre App geschlossen wurde. Aber wieso?
Es könnte sein, dass Ihre App aus einem anderen Grund abgestürzt ist, während Ihr Dialog geöffnet war
Dies führte dazu, dass Ihre App aufgrund eines Fehlers in Ihrem Code geschlossen wurde, der dazu führte, dass das Dialogfeld aufgrund des anderen Fehlers gleichzeitig mit dem Schließen Ihrer App geöffnet blieb.
Sehen Sie sich also Ihre Logik an. Lösen Sie den ersten Fehler und der zweite Fehler löst sich von selbst
Ein Fehler verursacht einen anderen, der einen anderen verursacht, wie DOMINOS!
Dieses Problem tritt auf, wenn Sie versuchen, einen Dialog anzuzeigen, nachdem Sie eine Aktivität beendet haben.
Ich habe dieses Problem gerade gelöst, indem ich den folgenden Code aufgeschrieben habe:
@Override
public void onDestroy(){
super.onDestroy();
if ( progressDialog!=null && progressDialog.isShowing() ){
progressDialog.cancel();
}
}
Grundsätzlich, von welcher Klasse Sie progressDialog gestartet haben, überschreiben Sie die onDestroy-Methode und führen Sie diesen Vorgang aus. Es wurde das Problem "Die Aktivität ist durchgesickert" behoben.
Ich habe kürzlich das gleiche Problem gesehen.
Der Grund für dieses Problem ist, dass die Aktivität, die vor dem Dialog geschlossen wurde, geschlossen wird. Es gibt verschiedene Gründe dafür. Die oben genannten Beiträge sind auch richtig.
Ich geriet in eine Situation, weil ich im Thread eine Funktion aufrief, die eine Ausnahme auslöst. Deswegen wurde das Fenster entlassen und damit die Ausnahme.
Schließen Sie den Dialog ab, wenn die Aktivität zerstört wird
@Override
protected void onDestroy()
{
super.onDestroy();
if (pDialog!=null && pDialog.isShowing()){
pDialog.dismiss();
}
}
Das könnte helfen.
if (! isFinishing()) {
dialog.show();
}
Ich hatte die gleiche dunkle Fehlermeldung und hatte keine Ahnung warum. Angesichts von Hinweisen aus den vorherigen Antworten habe ich meine Nicht-GUI-Aufrufe in mDialog.finish () in mDialog.dismiss () geändert und die Fehler verschwunden. Dies hat sich nicht auf das Verhalten meines Widgets ausgewirkt, aber es war verwirrend und hätte möglicherweise einen wichtigen Speicherverlust angezeigt.
Ich habe diese Protokolle in meiner Video-Player-Anwendung erhalten. Diese Meldungen wurden ausgegeben, während der Videoplayer geschlossen wurde. Interessanterweise habe ich diese Protokolle einmal in wenigen Durchläufen zufällig erhalten. Meine Bewerbung beinhaltet auch keine progressdialog
. Schließlich bin ich dieses Problem mit der folgenden Implementierung umgangen.
@Override
protected void onPause()
{
Log.v("MediaVideo", "onPause");
super.onPause();
this.mVideoView.pause();
this.mVideoView.setVisibility(View.GONE);
}
@Override
protected void onDestroy()
{
Log.v("MediaVideo", "onDestroy");
super.onDestroy();
}
@Override
protected void onResume()
{
Log.v("MediaVideo", "onResume");
super.onResume();
this.mVideoView.resume();
}
Überschreiben Sie die OnPause
mit dem Aufruf von mVideoView.pause()
und die Einstellung visibility
auf GONE
. Auf diese Weise konnte ich das Protokollfehlerproblem "Activity has leaked window
" beheben.
Ich hatte das gleiche Problem und fand diese Seite, und obwohl meine Situation anders war, rief ich finish
von einem if
-Block an, bevor er die Alarmbox definierte.
Also würde das einfache Anrufen von dismiss
nicht funktionieren (da es noch nicht gemacht wurde), aber nachdem ich die Antwort von Alex Volovoy gelesen und erkannt habe, dass es die Alarmbox war, die es verursacht hat. Ich habe versucht, eine return-Anweisung direkt nach dem Ende in diesem if
-Block einzufügen, und das Problem wurde behoben.
Ich dachte, als du fertig mit Finish angerufen hast, hat es alles gestoppt und ist genau dort fertig geworden, aber es tut es nicht. Es scheint bis zum Ende des Codeblocks zu gehen, in dem es sich befindet, und endet dann.
Wenn Sie also eine Situation implementieren möchten, in der es manchmal beendet wird, bevor Sie Code schreiben, müssen Sie direkt nach dem Ende eine return-Anweisung einfügen. Andernfalls wird es weitergehen und sich so verhalten, als würde das Ziel am Ende des Spiels aufgerufen Codeblock nicht dort, wo Sie es aufgerufen haben. Deshalb bekam ich all diese komischen Fehler.
private picked(File aDirectory){
if(aDirectory.length()==0){
setResult(RESULT_CANCELED, new Intent());
finish();
return;
}
AlertDialog.Builder alert= new AlertDialog.Builder(this); // Start dialog builder
alert
.setTitle("Question")
.setMessage("Do you want to open that file?"+aDirectory.getName());
alert
.setPositiveButton("OK", okButtonListener)
.setNegativeButton("Cancel", cancelButtonListener);
alert.show();
}
Wenn Sie die Rückgabe nicht direkt nach dem Aufruf von finish dort einfügen, wird es so aussehen, als hätten Sie es nach der alert.show();
aufgerufen, und daher würde das Fenster durchgespielt werden, sobald das Dialogfeld beendet wird, obwohl das Dialogfeld angezeigt wurde Das ist nicht der Fall, es scheint immer noch so zu sein.
Ich dachte, ich würde das hier hinzufügen, da dies zeigt, dass der Befehl zum Fertigstellen anders gehandelt hat, als ich gedacht hatte, und ich denke, es gibt andere Leute, die genauso denken, wie ich, bevor ich das entdeckte.
Dies ist keine Antwort auf die Frage, aber sie ist relevant für das Thema.
Wenn die Aktivität im Manifest ein Attribut definiert hat
Android:noHistory="true"
nach der Ausführung von onPause () geht der Aktivitätskontext verloren. Daher kann bei allen Ansichten, die den this - Kontext verwenden, dieser Fehler ausgegeben werden.
Versuchen Sie nicht nur, eine Warnung anzuzeigen, sondern auch, wenn Sie eine bestimmte Instanz einer Aktivität abschließen und versuchen, eine neue Aktivität/einen neuen Dienst zu starten oder zu stoppen.
Beispiel:
OldActivity instance;
oncreate() {
instance=this;
}
instance.finish();
instance.startActivity(new Intent(ACTION_MAIN).setClass(instance, NewActivity.class));
Versuchen Sie diesen Code:
public class Sample extends Activity(){
@Override
public void onCreate(Bundle instance){
}
@Override
public void onStop() {
super.onStop();
progressdialog.dismiss(); // try this
}
}
Hatte das Problem, dass ich eine Aktivität beendet habe, als ein Fortschrittsdialog angezeigt wurde.
Blenden Sie also zunächst den Dialog aus und beenden Sie dann die Aktivität.
Dies ist mir passiert, wenn ich ProgressDialog
in AsyncTask
verwende. Eigentlich verwende ich die hide()
-Methode in onPostExecute
. Basierend auf der Antwort von @Alex Volovoy muss ich dismiss()
mit ProgressDialog
verwenden, um es in onPostExecute zu entfernen und fertig zu werden.
progressDialog.hide(); // Don't use it, it gives error
progressDialog.dismiss(); // Use it
Der Fehler "Activity has leaked window that was originally added...
" tritt auf, wenn Sie versuchen, eine Warnung anzuzeigen, nachdem Activity
tatsächlich finished
ist.
Sie haben zwei Möglichkeiten AFAIK:
dismiss()
auf der dialog
auf, bevor Sie Ihre Aktivität beenden.dialog
in einen anderen Thread ein und führen Sie es auf diesem thread
aus (unabhängig vom aktuellen activity
).Dies kann der Fall sein, wenn Sie bei doInBackground()
function einen Fehler haben und diesen Code haben.
Versuchen Sie schließlich, einen Dialog hinzuzufügen. Überprüfen Sie zunächst die Funktion doInBackground()
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CreateAccount.this);
pDialog.setMessage("Creating Product..");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String...args) {
ERROR CAN BE IS HERE
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
Im Allgemeinen tritt dieses Problem aufgrund des Fortschrittsdialogfelds auf: Sie können dieses Problem lösen, indem Sie eine der folgenden Methoden in Ihrer Aktivität verwenden:
// 1):
@Override
protected void onPause() {
super.onPause();
if ( yourProgressDialog!=null && yourProgressDialog.isShowing() )
{
yourProgressDialog.cancel();
}
}
// 2) :
@Override
protected void onDestroy() {
super.onDestroy();
if ( yourProgressDialog!=null && yourProgressDialog.isShowing()
{
yourProgressDialog.cancel();
}
}
Sie müssen ein Progressdialog
-Objekt in der onPreExecute
-Methode der AsyncTask
erstellen, und Sie sollten dismiss
für die onPostExecute
-Methode.
Die beste Lösung ist das Hinzufügen eines Dialogs in Try Catch und Dease Dialog, wenn eine Ausnahme auftritt
Verwenden Sie einfach den folgenden Code
try {
dialog.show();
} catch (Exception e) {
dialog.dismiss();
}
In meinem Fall lag der Grund darin, dass ich vergessen habe, eine Erlaubnis in die Android-Manifestdatei aufzunehmen.
Wie habe ich es herausgefunden? Genau wie @Bobby in einem Kommentar unter der akzeptierten Antwort sagt, scrollen Sie einfach weiter zu Ihren Protokollen und Sie werden den ersten Grund oder das erste Ereignis sehen, das die Ausnahme wirklich ausgelöst hat. Anscheinend handelt es sich bei der Meldung "Aktivität ist durchgesickertes Fenster, das ursprünglich hinzugefügt wurde" nur um eine Ausnahme, die sich aus dem ergibt, was die erste Ausnahme ist.
Versuchen Sie es mit dem folgenden Code. Es funktioniert immer, wenn Sie den Fortschrittsdialog abbrechen, und es wird angezeigt, ob die Instanz verfügbar ist oder nicht.
try {
if (null != progressDialog && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
} catch (Exception e) {
e.printStackTrace();
}
Ausgenommene Fenster haben zwei Gründe:
1) Zeigen des Dialogs, wenn der Aktivitätskontext nicht vorhanden ist. Um dies zu lösen, sollten Sie den Dialog nur anzeigen, wenn Sie sicher sind, dass Aktivität vorhanden ist:
if(getActivity()!= null && !getActivity().isFinishing()){
Dialog.show();
}
2) den Dialog nicht angemessen abweisen, um diesen Code zu lösen:
@Override
public void onDestroy(){
super.onDestroy();
if ( Dialog!=null && Dialog.isShowing() ){
Dialog.dismiss();
}
}
Die beste Lösung ist dies vor dem Anzeigen von progressbar
oder progressDialog
.
if (getApplicationContext().getWindow().getDecorView().isShown()) {
//Show Your Progress Dialog
}
Stellen Sie nur sicher, dass Ihre Aktivität nicht unerwartet beendet wird, da im Code einige Ausnahmen auftreten. Im Allgemeinen geschieht dies in einer asynchronen Task, wenn die Aktivität in der doinBackground-Methode erzwungen wird und asynctask zur onPostexecute-Methode zurückkehrt.
Meines Erachtens geht es darum, dass Sie versuchen, einen Dialog aufzurufen, nachdem eine Aktivität abgeschlossen ist. Wenn Sie also mit Handler etwas verzögern, wird Ihr Problem gelöst.
Handler handler=new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
dialog.show();
//or
dialog.dismiss();
}
},100);
if (mActivity != null && !mActivity.isFinishing() && mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
Dieser Fehler wurde angezeigt, wenn versucht wurde, einen Toast aus dem Hintergrund-Thread anzuzeigen .. __ Dieser wurde durch Ausführen des UI-bezogenen Codes im UI-Thread behoben
Ich habe das gleiche Problem. Der Fehler war nicht in Dialog
sondern in einem EditText
. Ich habe versucht, den Wert von Edittext
innerhalb von Assynctask
zu ändern. Der einzige Ausweg, den ich lösen konnte, war das Erstellen einer neuen runnable
.
runOnUiThread(new Runnable(){
@Override
public void run() {
...
}
});
Ich habe eine andere Lösung dafür und würde gerne wissen, ob es für Sie gültig erscheint: Anstatt onDestroy abzulehnen, was die führende Lösung zu sein scheint, erweitere ich ProgressDialog ...
public class MyProgressDialog extends ProgressDialog {
private boolean isDismissed;
public MyProgressDialog(Context context) {
super(context);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
dismiss();
}
@Override
public void dismiss() {
if (isDismissed) {
return;
}
try {
super.dismiss();
} catch (IllegalArgumentException e) {
// ignore
}
isDismissed = true;
}
Dies ist vorzuziehen, AFAIC, weil Sie den Fortschrittsdialog nicht als Mitglied halten müssen, sondern nur feuern (zeigen) und vergessen
Stellen Sie sicher, dass Sie .__ anrufen. this.dialog.show. (Aktivität)
Ich stoße auch auf das WindowLeaked-Problem, wenn der Affentest ausgeführt wird.
A[email protected]4334fd40 that was originally added here
Android.view.WindowLeaked: Activity com.myapp.MyActivity has leaked window A[email protected]4334fd40 that was originally added here
at Android.view.ViewRootImpl.<init>(ViewRootImpl.Java:409)
at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:312)
at Android.view.WindowManagerImpl.addView(WindowManagerImpl.Java:224)
at Android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.Java:149)
at Android.view.Window$LocalWindowManager.addView(Window.Java:554)
at Android.support.v7.app.AppCompatDelegateImplV7.openPanel(AppCompatDelegateImplV7.Java:1150)
at Android.support.v7.app.AppCompatDelegateImplV7.onKeyUpPanel(AppCompatDelegateImplV7.Java:1469)
at Android.support.v7.app.AppCompatDelegateImplV7.onKeyUp(AppCompatDelegateImplV7.Java:919)
at Android.support.v7.app.AppCompatDelegateImplV7.dispatchKeyEvent(AppCompatDelegateImplV7.Java:913)
at Android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.Java:241)
at com.Android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.Java:2009)
at Android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.Java:3929)
at Android.view.ViewRootImpl.deliverKeyEvent(ViewRootImpl.Java:3863)
at Android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.Java:3420)
at Android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.Java:4528)
at Android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.Java:4506)
at Android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.Java:4610)
at Android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.Java:171)
at Android.os.MessageQueue.nativePollOnce(Native Method)
at Android.os.MessageQueue.next(MessageQueue.Java:125)
at Android.os.Looper.loop(Looper.Java:124)
at Android.app.ActivityThread.main(ActivityThread.Java:4898)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:511)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1008)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:775)
at dalvik.system.NativeStart.main(Native Method)
Meine Aktivität ist AppCompatActivity. Und ich habe es mit dem folgenden Code in der Aktivität erneuert.
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// added by sunhang : intercept menu key to resove a WindowLeaked error in monkey-test.
if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) {
return true;
}
return super.dispatchKeyEvent(event);
}
Wenn Sie es mit LiveData zu tun haben, versuchen Sie beim Aktualisieren des Werts, anstatt liveData.value = someValue
zu verwenden, liveData.postValue(someValue)
Ich habe einen Dialog `onFehler eines Videoplayers verwendet und statt verrückt zu werden (ich habe alle diese Lösungen getestet)
Ich habe mich für DialogFragment
http://developer.Android.com/reference/Android/app/DialogFragment.html entschieden.
Sie können die Erstellung des Builders in einer inneren DialogFragment
-Klasse zurückgeben. Überschreiben Sie einfach onCreateDialog
.
Möglicherweise haben Sie findViewById
in activity anstelle von dialog.findViewById
verwendet und anschließend eine OnClickListener
für eine null
-Instanz festgelegt, die wahrscheinlich den ursprünglichen Fehler verursacht hat.
Ich war auch einige Zeit mit diesem Problem konfrontiert, aber mir wurde klar, dass es nicht wegen dialog
in meinem Fall wegen ActionMode
ist. Wenn Sie also versuchen, die Aktivität zu beenden, wenn eine ActionMode
geöffnet ist, wird dies zu diesem Problem führen. Beenden Sie in der onPause
Ihrer Aktivität den Aktionsmodus.
private ActionMode actionMode;
@Override
public void onActionModeStarted(ActionMode mode) {
super.onActionModeStarted(mode);
actionMode = mode;
}
@Override
protected void onPause() {
super.onPause();
if (actionMode != null) actionMode.finish();
}