java.lang.IllegalArgumentException: Görünüm, pencere yöneticisine bağlı değil


148

AsyncTask başlatan ve işlem süresi için ilerleme iletişim kutusu gösteren bir etkinlik var. Etkinlik, döndürme veya klavye slaydı ile yeniden OLUŞTURULMADI bildirilir.

    <activity android:name=".MyActivity" 
              android:label="@string/app_name"
              android:configChanges="keyboardHidden|orientation"
              >
        <intent-filter>
        </intent-filter>
    </activity>

Görev tamamlandığında, iletişim kutusunu kapatırım, ancak bazı telefonlarda (çerçeve: 1.5, 1.6) bu hata atılır:

java.lang.IllegalArgumentException: View not attached to window manager
    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)
    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
    at android.view.Window$LocalWindowManager.removeView(Window.java:400)
    at android.app.Dialog.dismissDialog(Dialog.java:268)
    at android.app.Dialog.access$000(Dialog.java:69)
    at android.app.Dialog$1.run(Dialog.java:103)
    at android.app.Dialog.dismiss(Dialog.java:252)
    at xxx.onPostExecute(xxx$1.java:xxx)

Kodum:

final Dialog dialog = new AlertDialog.Builder(context)
    .setTitle("Processing...")
    .setCancelable(true)
    .create();

final AsyncTask<MyParams, Object, MyResult> task = new AsyncTask<MyParams, Object, MyResult>() {

    @Override
    protected MyResult doInBackground(MyParams... params) {
        // Long operation goes here
    }

    @Override
    protected void onPostExecute(MyResult result) {
        dialog.dismiss();
        onCompletion(result);
    }
};

task.execute(...);

dialog.setOnCancelListener(new OnCancelListener() {
    @Override
    public void onCancel(DialogInterface arg0) {
        task.cancel(false);
    }
});

dialog.show();

Okuduğumdan ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) ve Android kaynaklarında gördüğümden, bunu elde etmek için olası tek durum gibi görünüyor istisna, faaliyetin yok edildiği zamandır. Ancak daha önce de belirttiğim gibi, temel etkinlikler için aktivite rekreasyonunu yasaklıyorum.

Yani herhangi bir öneri çok takdir edilmektedir.


1
Bu sorunun birçok yanıtı var, eğer bunlardan herhangi biri size yardımcı olduysa, lütfen doğru cevap olarak seçin.
Parag Kadam

Yanıtlar:


228

Ben de zaman zaman onPostExecute yönteminden iletişim ve bitiş etkinliği kapatmak zaman bu hatayı alıyorum . Sanırım bazen iletişim başarıyla kapatılmadan önce etkinlik biter.

Benim için çalışan basit ama etkili bir çözüm

@Override
protected void onPostExecute(MyResult result) {
    try {
        if ((this.mDialog != null) && this.mDialog.isShowing()) {
            this.mDialog.dismiss();
        }
    } catch (final IllegalArgumentException e) {
        // Handle or log or ignore
    } catch (final Exception e) {
        // Handle or log or ignore
    } finally {
        this.mDialog = null;
    }  
}

44
Basit bir çözüm mü? Evet. Etkili? Belki de bu durumda. Tavsiye eder miyim? HAYIR! Bunun gibi TÜM istisnaları yutmayın ! Hatta IllegalArgumentException yakalamak değil, başka bir çözüm arayın.
Simon Forsberg

6
Çünkü genellikle boş deneme yakalamaları kötü bir fikirdir ... Bazen de yapılması gereken doğru şey olabilir.
Thomas

3
@Damjan Yanıtınızla catch Exception türünü öneriyorsunuz. Bu, Google tarafından kötü bir uygulamadır. Burada okuyabilirsiniz: Genel İstisna Yakalama .
Yaniv

17
Bunun etkili bir düzeltme olduğuna inanıyorum. Genel durumlarda bunu yapmamalıyız, ancak Android Framework bizim için kolay bir kontrol sağlamadığından, alışılmadık bir şekilde kullanmamız gerekiyor. Ayrıca, bir iletişim kutusunun beklediğimiz gibi çalıştığı bir isShowing () çağrısı varsa, bu tür bir saldırıya ihtiyacımız yoktur.
SXC

1
daha iyi bir şey bulunana kadar hızlı düzeltme
Rohit Tigga

13

İşte bu konuda bulduğum tüm iyi cevapların derlemesi olan "kurşun geçirmez" çözümüm (@Damjan ve @Kachi sayesinde). Burada istisna sadece diğer tüm tespit yolları başarılı olamadıysa yutulur. Benim durumumda iletişim kutusunu otomatik olarak kapatmam gerekiyor ve bu, uygulamayı kilitlenmeden korumanın tek yoludur. Umarım bu sana yardımcı olur! Yorumlarınız veya daha iyi bir çözümünüz varsa lütfen oy verin ve yorum bırakın. Teşekkür ederim!

public void dismissWithCheck(Dialog dialog) {
        if (dialog != null) {
            if (dialog.isShowing()) {

                //get the Context object that was used to great the dialog
                Context context = ((ContextWrapper) dialog.getContext()).getBaseContext();

                // if the Context used here was an activity AND it hasn't been finished or destroyed
                // then dismiss it
                if (context instanceof Activity) {

                    // Api >=17
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                        if (!((Activity) context).isFinishing() && !((Activity) context).isDestroyed()) {
                            dismissWithTryCatch(dialog);
                        }
                    } else {

                        // Api < 17. Unfortunately cannot check for isDestroyed()
                        if (!((Activity) context).isFinishing()) {
                            dismissWithTryCatch(dialog);
                        }
                    }
                } else
                    // if the Context used wasn't an Activity, then dismiss it too
                    dismissWithTryCatch(dialog);
            }
            dialog = null;
        }
    }

    public void dismissWithTryCatch(Dialog dialog) {
        try {
            dialog.dismiss();
        } catch (final IllegalArgumentException e) {
            // Do nothing.
        } catch (final Exception e) {
            // Do nothing.
        } finally {
            dialog = null;
        }
    }

1
çok iyi bir çözüm! Ayarın dialog = nullherhangi bir etkisi yoktur. Ve StatusEventDialogsadece okumalı Dialog.
hgoebl

1
StatusEventDialog iletişim kutusuna değiştirilmelidir.
Sreekanth Karumanaghat

Bu cevap kabul edilmiş, çok iyi ele
alınmalıdır

Anlıyorum "doğru" olmak istiyorum ve sadece deneyin / catch kullanılabilir durumda isDestroyed()değil, ama pratik amaçlar için sadece denemek / yakalamak her zaman kullanmak aynı olmaz mıydı?
zundi

11

Bir geçici çözümüm olabilir.

Ben bir dosyaya (dosya sistemi ListViewaracılığıyla) bir sürü öğe yüklüyorum aynı sorunu yaşıyordu AsyncTask. Had onPreExecute()a kadar ateş ProgressDialogve ardından hem onPostExecute()ve onCancelled()(görev yoluyla açıkça iptal edildiğinde denilen AsyncTask.cancel()yoluyla kapatma) .cancel().

Aynı "java.lang.IllegalArgumentException: Görünüm pencere yöneticisi bağlı değil" Got Ben de iletişim öldürürken hata onCancelled()yöntemine AsyncTask(ı mükemmel yapılan bu görmüştü Raflar app ).

Geçici çözüm bir kamu alanı yaratmaktı AsyncTaskiçerdiğini ProgressDialog:

public ProgressDialog mDialog;

Sonra, onDestroy()iptal AsyncTaskettiğimde, ilişkili iletişim kutusunu da şu şekilde öldürebilirim:

AsyncTask.mDialog.cancel();

Arayan AsyncTask.cancel()YAPAR tetiği onCancelled()içinde AsyncTask, ama yöntemi denir o zaman nedense, Görünüm zaten tahrip edilmiş ve böylece iletişim başarısız olup iptal.


UserTask uygulamasını @Paul'un bahsettiği gibi mükemmel buluyorum. Kaynak kodu burada: code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/…
Evi Song


9

İşte bu sorunu çözmek için doğru çözüm:

public void hideProgress() {
    if(mProgressDialog != null) {
        if(mProgressDialog.isShowing()) { //check if dialog is showing.

            //get the Context object that was used to great the dialog
            Context context = ((ContextWrapper)mProgressDialog.getContext()).getBaseContext();

            //if the Context used here was an activity AND it hasn't been finished or destroyed
            //then dismiss it
            if(context instanceof Activity) { 
                if(!((Activity)context).isFinishing() && !((Activity)context).isDestroyed()) 
                    mProgressDialog.dismiss();
            } else //if the Context used wasnt an Activity, then dismiss it too
                mProgressDialog.dismiss();
        }
        mProgressDialog = null;
    }
}

Tüm istisnaları körü körüne yakalamak yerine, bu çözüm sorunun kökünü ele alır: iletişim kutusunu başlatmak için kullanılan etkinlik zaten bittiğinde bir iletişim kutusunu azaltmaya çalışmak. KitKat çalıştıran Nexus 4 üzerinde çalışıyorum, ancak Android'in tüm sürümlerinde çalışmalıdır.


3
isDestroyedAPI 17+ gerektirir
Androiderson

Neden mProgressDialog'u null olarak ayarlamanız gerekiyor? Bu bellek sızıntısıyla mı ilgili? Lütfen açıklar mısın?
Pawan

@Pawan, bu benim için bir uygulama detayı. Gerekli değildir, bu sınıftaki işlevin çalışma şekli budur. Bir ilerleme iletişim kutusu gizlendikten sonra, null olarak ayarladım. Bir kullanıcı başka bir ilerleme iletişim kutusu göstermek istediğinde yeni bir örnek başlatılır.
Kachi

Kesinlikle! ((Etkinlik) içeriği) .isFinishing () gereklidir, teşekkürler! :)
Daniel Krzyczkowski

5

'Damjan' fikrini kabul ediyorum.
çok sayıda iletişim kutusu kullanıyorsanız, onDestroy () veya onStop () içindeki tüm iletişim kutularını kapatmalısınız.
'java.lang.IllegalArgumentException: Pencere yöneticisine bağlı olmayan görünüm' istisnası sıklığını azaltabilirsiniz.

@Override
protected void onDestroy() {
    Log.d(TAG, "called onDestroy");
    mDialog.dismiss();
    super.onDestroy();
}



ama biraz aşmak ...
daha açık hale getirmek için, onDestroy çağrıldıktan sonra herhangi bir iletişim kutusu gösterilmesini engeller.
aşağıdaki gibi kullanmıyorum. ama açık.

private boolean mIsDestroyed = false;

private void showDialog() {
    closeDialog();

    if (mIsDestroyed) {
        Log.d(TAG, "called onDestroy() already.");
        return;
    }

    mDialog = new AlertDialog(this)
        .setTitle("title")
        .setMessage("This is DialogTest")
        .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        })
        .create();
    mDialog.show();
}

private void closeDialog() {
    if (mDialog != null) {
        mDialog.dismiss();
    }
}

@Override
protected void onDestroy() {
    Log.d(TAG, "called onDestroy");
    mIsDestroyed = true;
    closeDialog();
    super.onDestroy();
}


iyi şanslar!


Her zaman boş av bloklarından kaçınmayı tercih ederim. denemeye değer, ancak bu hatanın üretilmesi zor olduğundan, gerçekten çalışıp çalışmadığını yalnızca zaman gösterecektir. yine de teşekkürler.
Dror Fichman

boş catch blokları nedir? try / catch kullanmıyorum. mIsDestroyed değişkeni çalışma aşıldı. ancak başka bir iş parçacığında çalıştıktan sonra bu iletişim kutusunun gösterdiği koda yazarsanız, bu değişkene ihtiyacınız olabilir. diğer iş parçacığı çalışırken, etkinlik bittiğinde, bu özel duruma bakabilirsiniz.
Mart'ta Hogun

Ben aynı prob vardı ve ben @Override genel void onPause () {if (dialog! = Null) dialog.dismiss (); super.onPause (); } şimdiye kadar bu hatayı yok ... bu yüzden cevabınızla aynı ve gerçekten yararlı olduğunu düşünüyorum
Chris Sim

@ChrisSim merhaba! onPuase () ve onDestroy () defference'dir. Activity onPuase olduğunda, İletişim Kutusu kapatılır. ve uygulamayı yürüttüğünüzde, İletişim Kutusu gösterilmez. istermisin
Hogun

@Hogun Evet, aynı fikir, demek istediğim yok etmek yerine duraklatma iletişim kutusunu kapatıyorum çünkü yok etmek değil duraklamaya ihtiyacım var. İkincisi, boş olmadığında kapatıyorum. Bunu başkaları için açıkladığınız için teşekkür ederiz.
Chris Sim

4

Bunu kullan.

if(_dialog!=null && _dialog.isShowing())
_dialog.dismiss();

2
@Damjan'ın önerdiği çözümle neredeyse aynı.
Yury

28
Bu yeterli değil, IllegalArgumentException bu denetimde hala olur.
Murphy

Aynı çözümü yaptım, ama yine de etkili olup olmadığını bilmiyorum. Sadece fark, ben ikinci bölüm .isShowing () boş değilse değerlendirilmez emin olmak için iki iç içe.
Nick

2
Bu yeterli değil.
trante

1
@Nick: ifBu gibi durumlarda birden çok kişinin yuvalanmasına gerek yoktur , Java &&operatörünün tembel değerlendirmesi (kısa devre de denir) vardır false; &&hep olacak false) dolayısıyla "tembel" değerlendirme, neyse. ||Birincisi değerlendirilirse benzer şekilde 2. işleneni de değerlendirmeyecektir true. Not: &ve |işleçleri bu davranışa sahip değildir ve bu nedenle her zaman her iki işleneni de değerlendirir.
Matthias

3

Aynı problemi yaşadım, çözebilirsin:

@Override
protected void onPostExecute(MyResult result) {
    try {
        if ((this.mDialog != null) && this.mDialog.isShowing()) {
            this.mDialog.dismiss();
        }
    } catch (final IllegalArgumentException e) {
        // Handle or log or ignore
    } catch (final Exception e) {
        // Handle or log or ignore
    } finally {
        this.mDialog = null;
    }  
}

2

Kodunuzun önerilen diğer cevabın aksine doğru olduğunu düşünüyorum. onPostExecute kullanıcı arabirimi iş parçacığında çalışır. AsyncTask'ın bütün mesele budur - runOnUiThread'i çağırmak veya işleyicilerle uğraşmak gibi bir endişe duymanıza gerek yok. Ayrıca, dokümanlara göre, dismiss () herhangi bir evreden güvenli bir şekilde çağrılabilir (bunu istisna yaptıklarından emin değiller).

Belki de etkinlik artık gösterilmedikten sonra dialog.dismiss () 'nin çağrıldığı bir zamanlama sorunudur?

SetOnCancelListener'ı yorumlayıp arka plan görevi çalışırken etkinlikten çıkarsanız ne olur test etmeye ne dersiniz? Sonra onPostExecute'ınız zaten reddedilmiş bir iletişim kutusunu kapatmaya çalışacaktır. Uygulama çökerse, iletişim kutusunu kapatmadan önce açık olup olmadığını kontrol edebilirsiniz.

Ben aynı sorunu yaşıyorum bu yüzden kodu denemek için gidiyorum.


Ayrıca dimiss () koduna baktım ve gerçekten de herhangi bir iş parçacığından güvenle çağrılabilir. BTW, test ile ilgili bir sorunum var, çünkü bu sorun kullanıcıların telefonlarında gerçekleşiyor ve asla kendim üretemedim :-( Yani kodu analiz ederek anlamaya çalışıyorum ... Zamanlamaya göre. ancak Aktivite İletişim kutusundan önce nasıl kapatılabileceği bir durum düşünemiyorum. bana bir şey bulursan biliyorum!
alex2k8

2

alex,

Burada yanlış olabilir, ancak birden fazla telefonun 'vahşi' olarak statik odaklı olarak işaretlenmiş uygulamalarda yön değiştirmelerine neden olan bir hata olduğundan şüpheleniyorum. Bu, kişisel telefonumda biraz oluyor ve grubumuzun kullandığı test telefonlarının çoğunda (droid, n1, g1, kahraman dahil). Genellikle statik olarak yönlendirilmiş (belki de dikey olarak) olarak işaretlenmiş bir uygulama, yatay bir yönlendirme kullanarak bir iki saniye kendini gösterir ve hemen geri döner. Sonuç olarak, uygulamanızın yön değiştirmesini istemeseniz de, uygulamanın hazır olması gerekir. Bu davranışın hangi koşullar altında çoğaltılabileceğini bilmiyorum, Android sürümüne özgü olup olmadığını bilmiyorum. Tek bildiğim, bunun birçok kez gerçekleştiğini gördüm :(

Etkinlik onCreateDialog yöntemini geçersiz kılmayı ve Android OS'nin Diyaloglarınızın yaşam döngüsünü yönetmesine izin veren bağlantıda sağlanan çözümü kullanmanızı öneririm . Bana öyle geliyor ki, aktivitenizin yön değiştirmesini istemeseniz de, yön değiştirmeyi bir yerde yapıyor. Her zaman yön değiştirmeyi önleyecek bir yöntemi izlemeye çalışabilirsiniz, ancak kişisel olarak piyasadaki tüm mevcut Android telefonlarda çalışan kusursuz bir yol olduğuna inanmadığımı söylemeye çalışıyorum.


1
Cihazınızın yön değiştirmesini engelleyebilirsiniz, ancak Etkinliğinizi yok eden / yeniden oluşturan bir dizi başka yapılandırma değişikliği vardır - ortak bir klavye klavyeyi içeri veya dışarı kaydırır.
Maksimum Keçi

2

Benim için en çok işe yarayan şey, Faaliyetin bitip bitmediğini doğrulamaktır.

if (!mActivity.isFinishing()) {
    dialog.dismiss();
}

2

Etkinlik, döndürme veya klavye slaydı ile yeniden OLUŞTURULMADI bildirilir.

Sadece aynı problemi aldım. API seviye 13 veya higer için düzeltme.
Android dokümanlarından:

Not: Uygulamanız API seviyesi 13 veya üzerini (minSdkVersion ve targetSdkVersion öznitelikleri tarafından bildirildiği gibi) hedefliyorsa, bir aygıt dikey ve yatay yönler arasında geçiş yaptığında da değiştiğinden, "screenSize" yapılandırmasını da bildirmeniz gerekir.

Bu yüzden tezahürümü değiştirdim:

<activity
        android:name="MyActivity"
        android:configChanges="orientation|screenSize"
        android:label="MyActivityName" >
</activity>

Ve şimdi iyi çalışıyor. Telefonu döndürdüğümde, etkinlik iletişim kutusu ve görünüm aynı kaldığında etkinlik yeniden oluşturulmuyor. Benim için hata yok.


bu bir çözüm değil. örneğin admob'dan Adview etkinliğim var ve boyut değişiklikleri için etkinliği yeniden oluşturmalı.
batmaci

2

Öncelikle iletişim kutusunu kapatmaya çalıştığınız yerde hata işleme.

 if ((progressDialog != null) && progressDialog.isShowing()) {
            progressDialog.dismiss();
            progressDialog = null;
        }

Bu sorunu çözmezse, etkinliğin onStop () yönteminde kapatın.

 @Override
    protected void onStop() {
        super.onStop();
        if ((progressDialog != null) && progressDialog.isShowing()) {
            progressDialog.dismiss();
            progressDialog = null;
        }
    }

1

Sunucudan bir listeyi senkronize etmek için bir düğme kullanırken aynı sorunu yaşadım: 1) Düğmeyi tıklatırım 2) Listeyi sunucudan indirirken bir ilerleme iletişim kutusu görüntülenir 3) Cihazı başka bir yöne çeviriyorum 4) java.lang .IllegalArgumentException: progress.dismiss () sırasında AsyncTask öğesinin postExecute () öğesinde pencere yöneticisine eklenmeyen görünüm.

Düzeltmeyi denediğimde, sorun oluşmasa bile listemin tüm öğeleri göstermediğini anladım.

Ben AsyncTask için etkinlik beign yok etmeden önce bitirmek (ve iletişim kutusunu kapatmak) olduğunu düşündüm, bu yüzden asynctask nesnesini bir öznitelik yaptı ve onDestroy () yöntemini geçersiz kıldı.

Asynctask çok zaman alırsa, kullanıcı cihazın yavaş olduğunu hissedebilir, ancak ilerleme iletişim kutusu görüntülenirken cihaz yönünü değiştirmeye çalışmak için ödediği bedel olduğunu düşünüyorum. Ve biraz zaman alsa bile uygulama çökmez.

private AsyncTask<Boolean, Void, Boolean> atask;

@Override
protected void onDestroy() {
    if (atask!=null)
        try {
            atask.get();
        } catch (InterruptedException e) {
        } catch (ExecutionException e) {
        }
    super.onDestroy();
}

1
@Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            if (progressDialog != null && progressDialog.isShowing()) {
                Log.i(TAG, "onPostexucte");
                progressDialog.dismiss();
}
}

3
Bu kod snippet'i, sorunun nasıl
çözüldüğüne

0

Aşağıdaki kod sizin için çalışıyor, Benim için mükemmel çalışıyor:

private void viewDialog() {
    try {
        Intent vpnIntent = new Intent(context, UtilityVpnService.class);
        context.startService(vpnIntent);
        final View Dialogview = View.inflate(getBaseContext(), R.layout.alert_open_internet, null);
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_DIM_BEHIND,
                PixelFormat.TRANSLUCENT);
        params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
        windowManager.addView(Dialogview, params);

        Button btn_cancel = (Button) Dialogview.findViewById(R.id.btn_canceldialog_internetblocked);
        Button btn_okay = (Button) Dialogview.findViewById(R.id.btn_openmainactivity);
        RelativeLayout relativeLayout = (RelativeLayout) Dialogview.findViewById(R.id.rellayout_dialog);

            btn_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Handler handler = new Handler(Looper.getMainLooper());
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                if (Dialogview != null) {
//                                ( (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE)).removeView(Dialogview);
                                    windowManager.removeView(Dialogview);
                                }
                            } catch (final IllegalArgumentException e) {
                                e.printStackTrace();
                                // Handle or log or ignore
                            } catch (final Exception e) {
                                e.printStackTrace();
                                // Handle or log or ignore
                            } finally {
                                try {
                                    if (windowManager != null && Dialogview != null) {
//                                    ((WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE)).removeView(Dialogview);
                                        windowManager.removeView(Dialogview);
                                    }
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                            //    ((WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE)).removeView(Dialogview);
//                        windowManager.removeView(Dialogview);


                        }
                    });
                }
            });
            btn_okay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Handler handler = new Handler(Looper.getMainLooper());
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            //        ((WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE)).removeView(Dialogview);
                            try {
                                if (windowManager != null && Dialogview != null)
                                    windowManager.removeView(Dialogview);
                                Intent intent = new Intent(getBaseContext(), SplashActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);


                                context.startActivity(intent);
                            } catch (Exception e) {
                                windowManager.removeView(Dialogview);
                                e.printStackTrace();
                            }
                        }
                    });
                }
            });
        } catch (Exception e) {
            //` windowManager.removeView(Dialogview);
            e.printStackTrace();
        }
    }

Arka plan hizmetinden çağırırsanız görünümünüzü global olarak tanımlamayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.