উইন্ডো ম্যানেজার ক্র্যাশের সাথে সংযুক্ত নয় দেখুন


188

আমি অ্যাপ ক্র্যাশগুলির প্রতিবেদন করতে ACRA ব্যবহার করছি। আমি একটি View not attached to window managerত্রুটি বার্তা পাচ্ছিলাম এবং ভেবেছিলাম আমি pDialog.dismiss();একটি if বিবৃতিতে মোড়ক দিয়ে এটি ঠিক করেছি :

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

এটি যে View not attached to window managerক্র্যাশগুলি পেয়েছি তার পরিমাণ হ্রাস পেয়েছে তবে আমি এখনও কিছু পেয়ে যাচ্ছি এবং কীভাবে এটি সমাধান করবেন তা সম্পর্কে আমি নিশ্চিত নই।

ভুল বার্তা:

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:425)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:327)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:83)
at android.app.Dialog.dismissDialog(Dialog.java:330)
at android.app.Dialog.dismiss(Dialog.java:312)
at com.package.class$LoadAllProducts.onPostExecute(class.java:624)
at com.package.class$LoadAllProducts.onPostExecute(class.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)

টুকিটাকি সংকেতলিপি:

class LoadAllProducts extends AsyncTask<String, String, String> 
{

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        pDialog = new ProgressDialog(CLASS.this);
        pDialog.setMessage("Loading. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
    }

    /**
     * getting All products from url
     * */
    protected String doInBackground(String... args) 
    {
        // Building Parameters
        doMoreStuff("internet");
        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) 
    {
         // dismiss the dialog after getting all products
         if (pDialog!=null) 
         {
                if (pDialog.isShowing()) 
                {
                    pDialog.dismiss();   //This is line 624!    
                }
         }
         something(note);
    }
}

সুস্পষ্ট:

    <activity
        android:name="pagename.CLASS" 
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout"            
        android:label="@string/name" >
    </activity>

এই ক্র্যাশটি ঘটে যাওয়া বন্ধ করতে আমি কী মিস করছি?


1
আপনি কি কখনও এটি খুঁজে বের করতে পারেন? আমারও একই সমস্যা হচ্ছে এটি বের করার মতো মনে হচ্ছে না।
টমজং

দুর্ভাগ্যক্রমে না. আমি কিছুক্ষন একটি অনুগ্রহ শুরু করতে পারেন। তারা আপনাকে সহায়তা করে যদি এইভাবে সমস্যা হয় তবে আপনার অন্যান্য থ্রেডগুলির কিছু পরীক্ষা করা উচিত।
হাওলি

আপনার AsyncTaskভিতরে ঘোষিত হয় Activityনাকি Fragment?
ইরকিটিন

দয়া করে "doMoreStuff ()" এবং "কিছু ()" ফাংশন পোস্ট করুন।
পাগল

ইস্যুটি মূল থ্রেডের অত্যধিক কাজের কারণে, সুতরাং প্রগতি ডায়ালগটি দেখানোর জন্য হ্যান্ডলারগুলি ব্যবহার করার চেষ্টা করুন এবং যদি (পিডায়ালগ! = নাল) এই লাইনটির কোনও প্রয়োজন নেই, কারণ এটি ডায়ালগটি চলছে কিনা তা নিজেই পরীক্ষা করে দেখছেন।
মধু

উত্তর:


446

কীভাবে বাগটি পুনরুত্পাদন করবেন:

  1. আপনার ডিভাইসে এই অপশনটি সক্রিয় করুন: Settings -> Developer Options -> Don't keep Activities
  2. AsyncTaskএক্সিকিউটিভ করার সময় এবং প্রদর্শনের সময় হোম বোতাম টিপুন ProgressDialog

অ্যান্ড্রয়েড ওএস লুকিয়ে যাওয়ার সাথে সাথে একটি ক্রিয়াকলাপ ধ্বংস করবে। যখন উইল onPostExecuteবলা হয় তখন "সমাপ্তি" অবস্থায় থাকবে এবং এর সাথে সংযুক্ত হবে না ।ActivityProgressDialogActivity

কিভাবে ঠিক হবে এটা:

  1. আপনার onPostExecuteপদ্ধতিতে কার্যকলাপের অবস্থা পরীক্ষা করুন ।
  2. খারিজ ProgressDialogমধ্যে onDestroyপদ্ধতি। অন্যথায়, android.view.WindowLeakedব্যতিক্রম নিক্ষেপ করা হবে। এই ব্যতিক্রমটি সাধারণত ডায়লগ থেকে আসে যা ক্রিয়াকলাপ শেষ হওয়ার পরেও সক্রিয় থাকে।

এই স্থির কোডটি ব্যবহার করে দেখুন:

public class YourActivity extends Activity {

    private void showProgressDialog() {
        if (pDialog == null) {
            pDialog = new ProgressDialog(StartActivity.this);
            pDialog.setMessage("Loading. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
        }
        pDialog.show();
    }

    private void dismissProgressDialog() {
        if (pDialog != null && pDialog.isShowing()) {
            pDialog.dismiss();
        }
    }

    @Override
    protected void onDestroy() {
        dismissProgressDialog();
        super.onDestroy();
    }

    class LoadAllProducts extends AsyncTask<String, String, String> {

        // Before starting background thread Show Progress Dialog
        @Override
        protected void onPreExecute() {
            showProgressDialog();
        }

        //getting All products from url
        protected String doInBackground(String... args) {
            doMoreStuff("internet");
            return null;
        }

        // After completing background task Dismiss the progress dialog
        protected void onPostExecute(String file_url) {
            if (YourActivity.this.isDestroyed()) { // or call isFinishing() if min sdk version < 17
                return;
            }
            dismissProgressDialog();
            something(note);
        }
    }
}

8
দুর্দান্ত উত্তর! বিটিডাব্লু, আইশোভিং () অপ্রয়োজনীয় কারণ বরখাস্ত () কিছু দিবে না যদি শোধ করা () == মিথ্যা থাকে। উত্স কোড
পিটার ঝাও

3
এই নির্দিষ্ট উদ্দেশ্যে সমস্ত এপিআইতে isDestroyed()ওভার ব্যবহার করে কী লাভ isFinishing()?
আলেকজান্ডার আবাকুমভ

@ আলেকজান্ডারআকাকুমভ: আমি যা বুঝি isFinishing()সেগুলি থেকে trueযদি কার্যকলাপটি সিস্টেম দ্বারা ধ্বংস হয়ে যায় তবে তার নিশ্চয়তা দেওয়া হয় না , ক্রিয়াকলাপগুলির ডকুমেন্টেশন দেখুন ।
মার্কাস পেঙ্গুইন

1
@ মারকাসপেনগুইন: ঠিক আছে। তবে, এই ক্ষেত্রে যদি কেউ লেখকের মন্তব্য থেকে কোনও পরামর্শ ব্যবহার করার চেষ্টা করে তবে // or call isFinishing() if min sdk version < 17সে খুব ব্যতিক্রম হয়। সুতরাং, আমরা একটি ভিন্ন এপিআই <17 চলমান অ্যাপ্লিকেশনগুলির জন্য এই উত্তর চেয়ে সমাধান প্রয়োজন
আলেকজান্ডার Abakumov

@ আলেকজান্ডারআকাকুমভ আমারও একই সমস্যা হচ্ছে, তবে ফিনিশিং আমার পক্ষে কাজ করছে না, এটি অ্যাসিঙ্কল্যাকব্যাকের অভ্যন্তরে আমার ক্রিয়াকলাপের একটি WeakReferences সংরক্ষণ করার কাজ করেছে এবং তারপরে:myActivityWeakReference.get() != null && !myActivityWeakReference.get().isFinishing()
rusito23

34

ইস্যু হতে পারে যে Activityহয়েছে finishedবাprogress of finishing

একটি চেক যুক্ত করুন isFinishingএবং ডায়ালগটি কেবল তখনই খারিজ করুনfalse

if (!YourActivity.this.isFinishing() && pDialog != null) {
    pDialog.dismiss();
}

আইশফিনিশিং: এই ক্রিয়াকলাপটি সমাপ্তির প্রক্রিয়াধীন কিনা তা পরীক্ষা করে দেখুন, হয় আপনি finishএটির জন্য অনুরোধ করেছিলেন বা অন্য কেউ অনুরোধ করেছে যে এটি শেষ হয়েছে।


1
চেকটি সহ ব্যতিক্রমটি এখনও ছুঁড়ে দেওয়া হচ্ছে
মার্কোস ভাসকনস্লোস

আমার প্রগ্রেসডায়ালগ এমন একটি ক্লাসে রয়েছে যা কোনও ক্রিয়াকলাপ নয় তাই আমি ফিনিশিং চেক @ লাইবিন ব্যবহার করতে অক্ষম
মণিরাজ

10

একটিতে Dialogতৈরির জন্য Fragment, আমি নিম্নলিখিত কোডটি ব্যবহার করি:

ProgressDialog myDialog = new ProgressDialog(getActivity());
myDialog.setOwnerActivity(getActivity());
...
Activity activity = myDialog.getOwnerActivity();
if( activity!=null && !activity.isFinishing()) {
    myDialog.dismiss();
}

আমি এই প্যাটার্নটি কেস মোকাবেলায় ব্যবহার করি যখন কোনও ব্যক্তির Fragmentকাছ থেকে বিচ্ছিন্ন হয়ে যেতে পারে Activity


8

কোডটি এখানে কীভাবে কাজ করছে তা দেখুন:

অ্যাসিঙ্ক টাস্কটি কল করার পরে, অ্যাসিঙ্ক টাস্কটি পটভূমিতে চলে। এটা কাম্য। এখন, এই অ্যাসিঙ্ক কার্যটির একটি অগ্রগতি ডায়ালগ রয়েছে যা ক্রিয়াকলাপের সাথে সংযুক্ত রয়েছে, আপনি যদি কোডটি কীভাবে দেখতে চান তা জিজ্ঞাসা করে:

pDialog = new ProgressDialog(CLASS.this);

আপনি পাস করছেন Class.this যুক্তির প্রসঙ্গ হিসাবে । সুতরাং অগ্রগতি ডায়ালগটি এখনও ক্রিয়াকলাপের সাথে সংযুক্ত।

এখন পরিস্থিতিটি বিবেচনা করুন: যদি আমরা ফিনিস () পদ্ধতিটি ব্যবহার করে ক্রিয়াকলাপটি শেষ করার চেষ্টা করি, যখন অ্যাসিঙ্ক টাস্কটি চলছে, আপনি সেই ক্রিয়াকলাপের সাথে সংযুক্ত রিসোর্সটি অ্যাক্সেস করার চেষ্টা করছেন এমনটি হ'ল progress bar যখন কার্যকলাপটি আর নেই আছে।

সুতরাং আপনি পাবেন:

java.lang.IllegalArgumentException: View not attached to the window manager

এর সমাধান:

1) ক্রিয়াকলাপ শেষ হওয়ার আগে ডায়ালগ বাক্সটি বরখাস্ত বা বাতিল হয়েছে তা নিশ্চিত করুন।

2) ক্রিয়াকলাপটি শেষ করুন, কেবলমাত্র ডায়ালগ বক্সকে বরখাস্ত করার পরে, এটিই হ'ল async কার্য শেষ।


1
# 2 সম্পর্কিত: কখন শেষ করতে হবে তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ নেই Activity; অ্যান্ড্রয়েড যে কোনও সময় এটি শেষ করতে পারে। সুতরাং, # 2 এটি বোঝায় না।
আলেকজান্ডার আবাকুমভ

6

@Erakitin উত্তর উপর ভিত্তি করে, কিন্তু অ্যান্ড্রয়েড সংস্করণ <এপিআই স্তর 17. দুঃখজনকভাবে জন্য সঙ্গতিপূর্ণ Activity.isDestroyed () শুধুমাত্র এপিআই স্তর 17 থেকে সমর্থিত, তাই যদি আপনি শুধু আমার মত একটি পুরোনো এপিআই স্তর লক্ষ্য করে হয়ে গেলে, আপনি করতে হবে এটি নিজেই পরীক্ষা করে দেখুন এর View not attached to window managerপরেও ব্যতিক্রম হয়নি ।

উদাহরণ কোড

public class MainActivity extends Activity {
    private TestAsyncTask mAsyncTask;
    private ProgressDialog mProgressDialog;
    private boolean mIsDestroyed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (condition) {
            mAsyncTask = new TestAsyncTask();
            mAsyncTask.execute();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mAsyncTask != null && mAsyncTask.getStatus() != AsyncTask.Status.FINISHED) {
            Toast.makeText(this, "Still loading", Toast.LENGTH_LONG).show();
            return;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mIsDestroyed = true;

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

    public class TestAsyncTask extends AsyncTask<Void, Void, AsyncResult> {    
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            mProgressDialog = ProgressDialog.show(MainActivity.this, "Please wait", "doing stuff..");
        }

        @Override
        protected AsyncResult doInBackground(Void... arg0) {
            // Do long running background stuff
            return null;
        }

        @Override
        protected void onPostExecute(AsyncResult result) {
            // Use MainActivity.this.isDestroyed() when targeting API level 17 or higher
            if (mIsDestroyed)// Activity not there anymore
                return;

            mProgressDialog.dismiss();
            // Handle rest onPostExecute
        }
    }
}


3

কনফিগারেশন ওভাররাইড পরিবর্তন এবং অগ্রগতি ডায়ালগ খারিজ। যদি অগ্রগতি ডায়ালগটি প্রতিকৃতিতে তৈরি করা হয় এবং ল্যান্ডস্কেপে বরখাস্ত হয় তবে এটি উইন্ডো ম্যানেজার ত্রুটির সাথে সংযুক্ত নয় এমন দৃশ্যটি ফেলে দেবে।

অগ্রগতি বারটি বন্ধ করুন এবং অনপজ (), অনব্যাকপ্রেসড এবং অনডাস্ট্রয়ে পদ্ধতিতে অ্যাসিঙ্ক টাস্কটি বন্ধ করুন।

if(asyncTaskObj !=null && asyncTaskObj.getStatus().equals(AsyncTask.Status.RUNNING)){

    asyncTaskObj.cancel(true);

}

3

ক্রিয়াকলাপের ডিসট্রয়কে ওভাররাইড করুন এবং আপনার কথোপকথনটি খারিজ করুন এবং এটিকে শূন্য করুন

protected void onDestroy ()
    {
        if(mProgressDialog != null)
            if(mProgressDialog.isShowing())
                mProgressDialog.dismiss();
        mProgressDialog= null;
    }

3

প্রথমত, ক্র্যাশের কারণটি হ'ল সাজসজ্জার ভিউজের সূচি -1, আমরা এটিকে অ্যান্ড্রয়েড উত্স কোড থেকে জানতে পারি, কোড স্নিপেট রয়েছে:

শ্রেণী: android.view.WindowManagerGlobal

ফাইল: WindowManagerGlobal.java

private int findViewLocked(View view, boolean required) {
        final int index = mViews.indexOf(view);
//here, view is decorView,comment by OF
        if (required && index < 0) {
            throw new IllegalArgumentException("View=" + view + " not attached to window manager");
        }
        return index;
    }

সুতরাং আমরা অনুসরণ রেজোলিউশন পেয়েছি, বিচারক সজ্জাভিত্তিক সূচকের বিচারক, এটি যদি 0 এর বেশি হয় তবে চালিয়ে যান বা কেবল ফিরে যান এবং বরখাস্ত ছেড়ে দিন, অনুসরণ হিসাবে কোড:

try {
            Class<?> windowMgrGloable = Class.forName("android.view.WindowManagerGlobal");
            try {
                Method mtdGetIntance = windowMgrGloable.getDeclaredMethod("getInstance");
                mtdGetIntance.setAccessible(true);
                try {
                    Object windownGlobal = mtdGetIntance.invoke(null,null);
                    try {
                        Field mViewField = windowMgrGloable.getDeclaredField("mViews");
                        mViewField.setAccessible(true);
                        ArrayList<View> mViews = (ArrayList<View>) mViewField.get(windownGlobal);
                        int decorViewIndex = mViews.indexOf(pd.getWindow().getDecorView());
                        Log.i(TAG,"check index:"+decorViewIndex);
                        if (decorViewIndex < 0) {
                            return;
                        }
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                }
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if (pd.isShowing()) {
            pd.dismiss();
        }

2

এই dismiss()পদ্ধতিটি ওভারাইড করুন :

@Override
public void dismiss() {
    Window window = getWindow();
    if (window == null) {
        return;
    }
    View decor = window.getDecorView();
    if (decor != null && decor.getParent() != null) {
        super.dismiss();
    }
}

সমস্যা পুনরুত্পাদন করতে, ডায়ালগ খারিজ করার আগে কেবল কার্যকলাপ শেষ করুন।


1

সব থেকে ভালো সমাধান. প্রথম প্রসঙ্গটি হ'ল ক্রিয়াকলাপের প্রসঙ্গ বা অ্যাপ্লিকেশন প্রসঙ্গটি যদি ক্রিয়াকলাপের প্রসঙ্গ হয় তবে কেবলমাত্র কার্যকলাপ শেষ হয়েছে কিনা তারপরে কল করুন dialog.show()বা না checkdialog.dismiss();

নীচে নমুনা কোড দেখুন ... আশা করি এটি সহায়ক হবে!

সংলাপ প্রদর্শন করুন

if (context instanceof Activity) {
   if (!((Activity) context).isFinishing())
     dialog.show();
}

কথোপকথন খারিজ করুন

if (context instanceof Activity) {
       if (!((Activity) context).isFinishing())
         dialog.dismiss();
    }

আপনি যদি আরও চেক যোগ করতে চান তবে শর্ত যুক্ত করুন dialog.isShowing()বা dialog !-nullব্যবহার করুন &&


0

এই সমস্যাটি হ'ল কারণ আপনার ক্রিয়াকলাপটি বরখাস্তর কার্যটি কল করার আগেই শেষ হয়ে যায়। ব্যতিক্রমটি পরিচালনা করুন এবং সঠিক কারণে আপনার ADB লগটি পরীক্ষা করুন।

/**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
    try {
         if (pDialog!=null) {
            pDialog.dismiss();   //This is line 624!    
         }
    } catch (Exception e) {
        // do nothing
    }
     something(note);
}

0

আমি এই ব্যতিক্রমটি পুনরুত্পাদন করার একটি উপায় পেয়েছি।

আমি 2 ব্যবহার করি AsyncTask। একজন লম্বা টাস্ক করেন এবং অন্যটি শর্ট টাস্ক করেন। সংক্ষিপ্ত কাজ শেষ হওয়ার পরে, কল করুন finish()। দীর্ঘ কাজ শেষ হয়ে গেলে এবং কল করার সময় Dialog.dismiss()এটি ক্রাশ হয়ে যায়।

এখানে আমার নমুনা কোড:

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    private ProgressDialog mProgressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate");

        new AsyncTask<Void, Void, Void>(){
            @Override
            protected void onPreExecute() {
                mProgressDialog = ProgressDialog.show(MainActivity.this, "", "plz wait...", true);
            }

            @Override
            protected Void doInBackground(Void... nothing) {
                try {
                    Log.d(TAG, "long thread doInBackground");
                    Thread.sleep(20000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                Log.d(TAG, "long thread onPostExecute");
                if (mProgressDialog != null && mProgressDialog.isShowing()) {
                    mProgressDialog.dismiss();
                    mProgressDialog = null;
                }
                Log.d(TAG, "long thread onPostExecute call dismiss");
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

        new AsyncTask<Void, Void, Void>(){
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    Log.d(TAG, "short thread doInBackground");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);
                Log.d(TAG, "short thread onPostExecute");
                finish();
                Log.d(TAG, "short thread onPostExecute call finish");
            }
        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

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

আপনি এটি চেষ্টা করে দেখতে পারেন এবং এই সমস্যাটি সমাধানের সর্বোত্তম উপায় কোনটি। আমার অধ্যয়ন থেকে, এটি ঠিক করার জন্য কমপক্ষে 4 টি উপায় রয়েছে:

  1. @ ইরাকিটিনের উত্তর: isFinishing()ক্রিয়াকলাপের অবস্থা পরীক্ষা করতে কল করুন
  2. @ কাপির উত্তর: ক্রিয়াকলাপের অবস্থা পরীক্ষা করতে পতাকা সেট করুন
  3. এটি পরিচালনা করতে চেষ্টা / ধরুন।
  4. ফোন করুন AsyncTask.cancel(false)মধ্যে onDestroy()। এটি অ্যাসিঙ্কটাসকে onPostExecute()কার্যকর করতে বা onCancelled()তার পরিবর্তে কার্যকর করতে বাধা দেবে ।
    দ্রষ্টব্য: অ্যান্ড্রয়েড ২ এক্সএক্সের মতো পুরানো অ্যান্ড্রয়েড ওএসে onPostExecute()কল AsyncTask.cancel(false)করার পরেও কার্যকর করা হবে

আপনি আপনার জন্য সেরাটি চয়ন করতে পারেন।


0

আপনি বিশ্বব্যাপী পিডায়ালগের সূচনা করতে পারেন, তারপরে এটি সরিয়ে ফেলুন এবং স্থানীয়ভাবে আপনার মতামত বা সংলাপটি অন্তর্নিহিত করুন I আমার একই সমস্যা আছে, আমি এটি করেছি এবং আমার সমস্যাটি সমাধান হয়েছে। আশা করি এটি আপনার পক্ষে কাজ করবে।


0

আমরা onPauseপদ্ধতি বা onDestroyপদ্ধতিতে আমাদের ডায়ালগটিও বাতিল করে দিয়েছি

@Override
protected void onPause() {
    super.onPause();
    dialog.dismiss();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    dialog.dismiss();
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.